Fragen zu Basicproblemen mit Calc

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Fragen zu Basicproblemen mit Calc

von Stephan » Do, 31.08.2006 16:14

Hallo Michael,

ich sehe das auch so und hatte deshalb geschrieben:
Vielleicht hat die Online-Hilfe hier insgesamt recht, denn ich habe Oben Behauptetes nicht darauf geprüft wie die Wechselwirkungen evtl. sind
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.
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

von ykcim » Do, 31.08.2006 15:37

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

von Stephan » Do, 31.08.2006 15:07

Leider weiß ich nun noch immer nicht, welche Zeichen von OpenOffice zugelassen werden.
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.

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 
denn sie löst Dein Problem, und ist schneller als die Lösung von Thomas.

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
Eigentlich gehen noch sehr viel mehr, weil wohl auch Unicodezeichen zulässig sind, die kriegst Du bloß praktischerseits und wegen der Begrenzung auf 64K nicht in die Msgbox, müßtest sie also bei Interess in ein Dokument ausgeben.
Manchmal steht die Antwort doch tatsächlich in der Online-Hilfe.

Nur Buchstaben und Zahlen. Das Leerzeichen geht aber auch noch.
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:

Code: Alles auswählen

for i = 0 to 65535
laufen lies.

Gruß
Stephan

von ykcim » Do, 31.08.2006 14:50

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

von DarkGuardian » Do, 31.08.2006 13:45

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.

von Toxitom » Mi, 30.08.2006 12:52

Hey DarkGuardian,
welche Zeichen im Namen eines Sheets von OpenOffice verboten sind.
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.
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
Gruss
Thomas

von DarkGuardian » Mi, 30.08.2006 09:50

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.

von Toxitom » Mo, 28.08.2006 19:24

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:

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
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

von DarkGuardian » Mo, 28.08.2006 16:13

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.

von DarkGuardian » Mi, 23.08.2006 13:32

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.

von ykcim » Mi, 23.08.2006 13:22

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.

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
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.

Code: Alles auswählen

  odoc=thiscomponent
  osheet=odoc.sheets(0)
  mycell = osheet.getCellRangeByName("Test")
  mycell.string="SSS"

mfg
Michael

Fragen zu Basicproblemen mit Calc

von DarkGuardian » Mi, 23.08.2006 13:04

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?

Nach oben