Fragen zu Basicproblemen mit Calc
Moderator: Moderatoren
-
- Beiträge: 9
- Registriert: Do, 17.08.2006 13:40
Fragen zu Basicproblemen mit Calc
Hallo zusammen
Ich habe mein erstes Makro entwickelt, um eine Tabelle etwas zu automatisieren. Insgesamt funktioniert es auch recht gut, nur gibt es noch ein paar Schönheitsfehler, die ich gerne verbessern möchte. Daher wende ich mich mit meinen Frage an dieses Forum.
1. Ich lese eine Zelle aus und nutze den Text als Namen für ein neues Sheet. Dabei möchte ich ungültige Namen abfangen (doppelte werden bereits abgefangen). Leider weiß ich nicht, wie ich das realisieren kann.
2. Ich habe ein Schaltfläche, die das Makro auslöst. Wenn ich den oben erwähnten Namen gerade eingegeben habe und auf die Schaltfläche klicke, behält die Zelle des Namens den Fokus und die Änderung ist somit bei Makrostart noch nicht gültig. Gibt es einen einfachen Weg, um dieses Problem zu lösen / umgehen?
3. Ich habe einzelne Zellen benannt, die Hilfsvariablen enthalten, um Probleme bei neuen Zeilen zu umgehen (da ändert sich ja evtl. die Adresse der Zelle). Nun weiß ich aber nicht, wie ich die Zelle in einem Makro über den Namen ansprechen kann. Kann mir dazu jemand einen Tipp geben?
Ich habe mein erstes Makro entwickelt, um eine Tabelle etwas zu automatisieren. Insgesamt funktioniert es auch recht gut, nur gibt es noch ein paar Schönheitsfehler, die ich gerne verbessern möchte. Daher wende ich mich mit meinen Frage an dieses Forum.
1. Ich lese eine Zelle aus und nutze den Text als Namen für ein neues Sheet. Dabei möchte ich ungültige Namen abfangen (doppelte werden bereits abgefangen). Leider weiß ich nicht, wie ich das realisieren kann.
2. Ich habe ein Schaltfläche, die das Makro auslöst. Wenn ich den oben erwähnten Namen gerade eingegeben habe und auf die Schaltfläche klicke, behält die Zelle des Namens den Fokus und die Änderung ist somit bei Makrostart noch nicht gültig. Gibt es einen einfachen Weg, um dieses Problem zu lösen / umgehen?
3. Ich habe einzelne Zellen benannt, die Hilfsvariablen enthalten, um Probleme bei neuen Zeilen zu umgehen (da ändert sich ja evtl. die Adresse der Zelle). Nun weiß ich aber nicht, wie ich die Zelle in einem Makro über den Namen ansprechen kann. Kann mir dazu jemand einen Tipp geben?
Hi,
zu 1.
Du kannst in einer Schleife alle Buchstaben der Eingabe auf die nicht Zugelassenen prüfen.
Oder du verwendest die Tatsache das eine Namensänderung in Basic mit falschen Zeichen nicht ausgeführt wird.
zu 2.
Ich muß gestehen, ich weiß nicht was Du meinst.
zu 3.
Das geht mit getCellRangeByName. Es heißt zwar Range, es kann aber uch nur eine Zelle sein.
mfg
Michael
zu 1.
Du kannst in einer Schleife alle Buchstaben der Eingabe auf die nicht Zugelassenen prüfen.
Oder du verwendest die Tatsache das eine Namensänderung in Basic mit falschen Zeichen nicht ausgeführt wird.
Code: Alles auswählen
sub tablename
odoc=thiscomponent
osheet=odoc.sheets(0)
weiter = false
while weiter=false
orgname=osheet.name
newname=inputbox("Neuer Name")
osheet.name=newname
if osheet.name<>orgname then
weiter=true
else
msgbox "Ungültiger Name"
end if
wend
end sub
Ich muß gestehen, ich weiß nicht was Du meinst.
zu 3.
Das geht mit getCellRangeByName. Es heißt zwar Range, es kann aber uch nur eine Zelle sein.
Code: Alles auswählen
odoc=thiscomponent
osheet=odoc.sheets(0)
mycell = osheet.getCellRangeByName("Test")
mycell.string="SSS"
mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
FAQ zu Starbasic -> http://www.starbasicfaq.de
-
- Beiträge: 9
- Registriert: Do, 17.08.2006 13:40
Danke für die schnelle Antwort. Ich habe zwar noch keine Zeit, deine Tipps zu testen, aber das kommt noch *g*.
Aber zumindest kann ich noch weiter erklären.
zu 2.:
Wenn man einen Text in eine Zelle schreibt, wird dieser erst in das Sheet übernommen, wenn man die Zelle verlässt (per Return oder Auswahl eine andere Zelle). Wenn ich aber nach Eingabe und vor Return einen Button betätige, erkennt Calc nicht den Fokuswechsel. Die Zelle ist noch immer im Fokus und das Makro erhält somit den alten Text der Zelle, der aber nicht zu sehen ist (nur wenn ich die Zelle mit ESC verlasse, erscheint der alte Text wieder).
Dieses Problem möchte ich nun lösen/umgehen. Ich hoffe, dass du nun mehr mit meiner Beschreibung anfangen kannst.
Aber zumindest kann ich noch weiter erklären.
zu 2.:
Wenn man einen Text in eine Zelle schreibt, wird dieser erst in das Sheet übernommen, wenn man die Zelle verlässt (per Return oder Auswahl eine andere Zelle). Wenn ich aber nach Eingabe und vor Return einen Button betätige, erkennt Calc nicht den Fokuswechsel. Die Zelle ist noch immer im Fokus und das Makro erhält somit den alten Text der Zelle, der aber nicht zu sehen ist (nur wenn ich die Zelle mit ESC verlasse, erscheint der alte Text wieder).
Dieses Problem möchte ich nun lösen/umgehen. Ich hoffe, dass du nun mehr mit meiner Beschreibung anfangen kannst.
-
- Beiträge: 9
- Registriert: Do, 17.08.2006 13:40
Leider bin ich mit meinen Problemen noch nicht am Ende.
Punkt 1 ist leider noch offen. Die Abfrage auf doppelte Namen klappt ja schon länger. Aber ich weiß nicht, wie ich den String auf ungültige Zeichen untersuchen kann. Woher weiß ich denn welche Zeichen alles ungültig sind? Und wie durchwandere ich einen String zeichenweise?
Punkt 2 ist leider auch noch offen. Ich hoffe, dass zumindest klar wurde, wo mein Problem liegt. Falls nicht, fragt bitte genauer nach, damit ich das besser beschreiben kann (für mich ist meine Beschreibung natürlich verständlich *g*).
Punkt 3 hat sich erledigt und funktioniert mit dem von ykcim beschriebenen Tipp. Danke nochmal dafür.
Punkt 1 ist leider noch offen. Die Abfrage auf doppelte Namen klappt ja schon länger. Aber ich weiß nicht, wie ich den String auf ungültige Zeichen untersuchen kann. Woher weiß ich denn welche Zeichen alles ungültig sind? Und wie durchwandere ich einen String zeichenweise?
Punkt 2 ist leider auch noch offen. Ich hoffe, dass zumindest klar wurde, wo mein Problem liegt. Falls nicht, fragt bitte genauer nach, damit ich das besser beschreiben kann (für mich ist meine Beschreibung natürlich verständlich *g*).
Punkt 3 hat sich erledigt und funktioniert mit dem von ykcim beschriebenen Tipp. Danke nochmal dafür.
Hey DarkGuardian,
also, manche Sachen gehst du falsch an - doch dazu später.
zu Punkt 1: Ungültige Zeichen (oder besser gültige Zeichen) legst du selbst fest - am Besten als Array. Und dann lässt du eine Schleife über alle Zeichen laufen und prüfst die Zeichen ab:
Eben so zum Beispiel.
Punkt 2: Du solltest unbedingt den Eingabetext auslesen - aus dem Kontrollelement direkt - also aus der Eingabebox! Nicht erst den an die Zelle übergebenen - dann hast keine Problem und es wäre auch der normale Areitsweg
Gruss
Thomas
also, manche Sachen gehst du falsch an - doch dazu später.
zu Punkt 1: Ungültige Zeichen (oder besser gültige Zeichen) legst du selbst fest - am Besten als Array. Und dann lässt du eine Schleife über alle Zeichen laufen und prüfst die Zeichen ab:
Code: Alles auswählen
sub Stringtest(s as string)
dim aListe()
dim flag as boolean
aListe = Array(48,49,50,51,52,53,54,55,56,57) 'Asci-NUmmern der
'gültigen Zeichen -hier Zahlen 0-9
flag = false
for i = 0 to uBound(s)
sZeichen = mid(s, i, 1) 'jedes einzelne Zeichen
for j = 0 to uBound(aListe())
if sZeichen = aListe(j) then 'Zeichen gültig
flag = true
exit for
next
if not flag then msgbox "Das Zeichen ist ungültig: " & sZeichen
next
end sub
Punkt 2: Du solltest unbedingt den Eingabetext auslesen - aus dem Kontrollelement direkt - also aus der Eingabebox! Nicht erst den an die Zelle übergebenen - dann hast keine Problem und es wäre auch der normale Areitsweg

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
-
- Beiträge: 9
- Registriert: Do, 17.08.2006 13:40
Hallo Toxitom
Danke für deine Antwort.
Zu Punkt 1 habe ich noch eine Frage, da du mich anscheinend nicht richtig verstanden hast. Mir ist klar, dass ich auf eine Liste von ungültigen Zeichen prüfen kann, wobei ich dir aber sehr dankbar für deinen Beispielcode bin. Nun wüßte ich aber gerne, welche Zeichen im Namen eines Sheets von OpenOffice verboten sind.
Zu Punkt 2 muss ich zugeben, dass ich kein Kontrollelement nutze, sondern nur aus eine Zelle auslese. Ich werde das mal mit einer Eingabebox ausprobieren.
Danke für deine Antwort.
Zu Punkt 1 habe ich noch eine Frage, da du mich anscheinend nicht richtig verstanden hast. Mir ist klar, dass ich auf eine Liste von ungültigen Zeichen prüfen kann, wobei ich dir aber sehr dankbar für deinen Beispielcode bin. Nun wüßte ich aber gerne, welche Zeichen im Namen eines Sheets von OpenOffice verboten sind.
Zu Punkt 2 muss ich zugeben, dass ich kein Kontrollelement nutze, sondern nur aus eine Zelle auslese. Ich werde das mal mit einer Eingabebox ausprobieren.
Hey DarkGuardian,
Alle anderen Zeichen musst du ausprobieren. Allerdings würde ich die Varainten auf genau diese Zeichen eingrenzen - dann bist du auf der sicheren Seite. Zum Beispiel Leerzeichen: Sind wohl erlaubt, es kann aber bei der Weiterverarbeitung dann zu Fehlern kommen und so weiter.
zu 2:)
OK, das war ein Missverständnis. Aber dann ist dein Problem einfach zu lösen: Kalkuliere am Anfang des Makros - dadurch wird die aktuelle eingabe direkt in die Zelle geschieben und gespeichert. Also so:
Gruss
Thomas
Das hängt ein wenig von deiner Lokaliesierung ab. Auf jeden Fall erlaubt sind: Ale Buchstaben (AscII65 -90 und 97-122) , die Ziffern (ASCII 48-57), der Unterstrich (095), der Bindestrich (045)., wobei ich nicht sicher weiss, ob du mit Zahlen, Untertrich oder Bindestrich beginnen darfst.welche Zeichen im Namen eines Sheets von OpenOffice verboten sind.
Alle anderen Zeichen musst du ausprobieren. Allerdings würde ich die Varainten auf genau diese Zeichen eingrenzen - dann bist du auf der sicheren Seite. Zum Beispiel Leerzeichen: Sind wohl erlaubt, es kann aber bei der Weiterverarbeitung dann zu Fehlern kommen und so weiter.
zu 2:)
OK, das war ein Missverständnis. Aber dann ist dein Problem einfach zu lösen: Kalkuliere am Anfang des Makros - dadurch wird die aktuelle eingabe direkt in die Zelle geschieben und gespeichert. Also so:
Code: Alles auswählen
sub MeinMakroMitDerSchaltfaecheVerbunden
thisComponent.calculate() 'bewirkt das Durchkalkulieren des Dokuments
REM und hier folgt dein bisheriger Makrotext :-)
end sub
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
-
- Beiträge: 9
- Registriert: Do, 17.08.2006 13:40
Hallo Toxitom
Danke für dein Posting. Leider weiß ich nun noch immer nicht, welche Zeichen von OpenOffice zugelassen werden. Denn selbst bei deiner kleinen Auswahl ist ein Fehler enthalten, denn Sheetnamen dürfeb keinen Bindestrich enthalten.
Daher bin ich auf der Suche nach einer Definition von OpenOffice.org
Der zweite Tipp ist aber dafür umso besser. Denn nun klappt das.
Danke für dein Posting. Leider weiß ich nun noch immer nicht, welche Zeichen von OpenOffice zugelassen werden. Denn selbst bei deiner kleinen Auswahl ist ein Fehler enthalten, denn Sheetnamen dürfeb keinen Bindestrich enthalten.
Daher bin ich auf der Suche nach einer Definition von OpenOffice.org
Der zweite Tipp ist aber dafür umso besser. Denn nun klappt das.
RTFM!
Manchmal steht die Antwort doch tatsächlich in der Online-Hilfe.
Nur Buchstaben und Zahlen. Das Leerzeichen und Unterstrich gehen aber auch noch.
mfg
Michael
Manchmal steht die Antwort doch tatsächlich in der Online-Hilfe.

Nur Buchstaben und Zahlen. Das Leerzeichen und Unterstrich gehen aber auch noch.
mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
FAQ zu Starbasic -> http://www.starbasicfaq.de
Ich verstehe nicht wozu Du das im Konkreten brauchst, denn Michaels Lösung erfüllt vollständig Deine Anforderungen - oder wolltest Du einzelne Zeichen austauschen, nur davon war bisher nicht die Rede.Leider weiß ich nun noch immer nicht, welche Zeichen von OpenOffice zugelassen werden.
Also was stört Dich an dieser Lösung:
Code: Alles auswählen
sub tablename
odoc=thiscomponent
osheet=odoc.sheets(0)
weiter = false
while weiter=false
orgname=osheet.name
newname=inputbox("Neuer Name")
osheet.name=newname
if osheet.name<>orgname then
weiter=true
else
msgbox "Ungültiger Name"
end if
wend
end sub
Außerdem ist sie gleichzeitig geeignet herauszufinden welche Zeichen zulässig sind und welche nicht, automatisch meinethalben auch so:
Code: Alles auswählen
sub tablename
odoc=thiscomponent
osheet=odoc.sheets(0)
for i = 0 to 255
orgname=osheet.name
osheet.name=CHR(i)
if osheet.name<>orgname then
a = a & CHR(i) & "(" & i & ")" & " | "
end if
Next
MsgBox (a,0, "gültige Zeichen - Zeichen(ASCII-Wert)")
end sub
Vielleicht hat die Online-Hilfe hier insgesamt recht, denn ich habe Oben Behauptetes nicht darauf geprüft wie die Wechselwirkungen evtl. sind. Eine Benennung ist aber auch mit UniCode möglich, i.d.S. werden sogar bestimmte nichtdruckbare Zeichen akzeptiert (natürlich als Quadrat dargestellt) - habe ich aber auch gerade erst festgestellt als ich obrigen Code mittels:Manchmal steht die Antwort doch tatsächlich in der Online-Hilfe.
Nur Buchstaben und Zahlen. Das Leerzeichen geht aber auch noch.
Code: Alles auswählen
for i = 0 to 65535
Gruß
Stephan
Hallo Stephan,
es mag sein das mehr Zeichen gehen. Aber ob diese dann auch immer richtig bei Verweisen oder Bezügen und/oder verschiedenen Betriebsystemen gehen?
Normalerweise sollte das Alphabet und Ziffern langen. Und man ist auf der sicheren Seite
mfg
Michael
es mag sein das mehr Zeichen gehen. Aber ob diese dann auch immer richtig bei Verweisen oder Bezügen und/oder verschiedenen Betriebsystemen gehen?
Normalerweise sollte das Alphabet und Ziffern langen. Und man ist auf der sicheren Seite

mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
FAQ zu Starbasic -> http://www.starbasicfaq.de
Hallo Michael,
ich sehe das auch so und hatte deshalb geschrieben:
Das war also nicht gegen die grundsätzliche Richtigkeit Deiner Aussage gerichtet, aber es könnte sein das man in der Fülle der Zeichen eines findet was durch optische Ähnlichkeit den Bindestrich ersetzen könnte und das wäre interessant, weil danach schon mal gefragt wurde und ich keine Lösung weiß. Ich müßte nur mal alle als zulässig erkannten Zeichen durchsehen.
In kurzer Durchsicht ist aber Zeichen CHR(12641) ein optisch besserer Ersatz für den Bindestrich als der Unterstrich ... aber ebend nur wenn es dann keine funktionellen Probleme gibt und da bin ich unsicher.
Gruß
Stephan
ich sehe das auch so und hatte deshalb geschrieben:
Ich habe das mit dem Unicode auch nur gepostet weil ich jetzt ganz zufällig drauf stieß (wenn ich per Hand solche Zeichen verwenden würde ginge das wohl nur per Copy und Paste) und ich dachte Du hättest ggf. gleich einen Hinweis.Vielleicht hat die Online-Hilfe hier insgesamt recht, denn ich habe Oben Behauptetes nicht darauf geprüft wie die Wechselwirkungen evtl. sind
Das war also nicht gegen die grundsätzliche Richtigkeit Deiner Aussage gerichtet, aber es könnte sein das man in der Fülle der Zeichen eines findet was durch optische Ähnlichkeit den Bindestrich ersetzen könnte und das wäre interessant, weil danach schon mal gefragt wurde und ich keine Lösung weiß. Ich müßte nur mal alle als zulässig erkannten Zeichen durchsehen.
In kurzer Durchsicht ist aber Zeichen CHR(12641) ein optisch besserer Ersatz für den Bindestrich als der Unterstrich ... aber ebend nur wenn es dann keine funktionellen Probleme gibt und da bin ich unsicher.
Gruß
Stephan