waldgnarf
Goto Top

VBScript Loop 2D klappt nicht

Hallo, ich versuche mit einem Loop die Notitzen aller Zellen in einem Openoffice Calc Dokument automatisch zu tarnen. Weil ich niergens eine Möglichkeit finden konnte die Notitzen korrekt nach dem abspeichern und neu öffnen ohne IsVisible=True unsichtbar zu machen. In der selben Datei nach dem automatischen neuöffnen findet der Script die ZELLE nichtmer und Annonation wies scheint auch nicht. Ich sehe keine andere Möglichkeit als jede Zelle einzeln abzuklappern und ZELLE.Annotation.IsVisible=False zu setzen, allerdings werden nur die Notitzen in der ersten Zeile getarnt.
INDEX=0
Set SSM=WScript.CreateObject("com.sun.star.ServiceManager")  
Set DESKTOP=SSM.createInstance("com.sun.star.frame.Desktop")  
Set CALC=DESKTOP.loadComponentFromURL("file:///C:/PFLANZEN.ods", "_blank", 0, Array())  
Set BLATT=CALC.getSheets().getByIndex(INDEX)
POSY=0
POSX=0

Do
  Set ZELLE=BLATT.getCellByPosition(POSY, POSX)
  INHALT=ZELLE.getFormula()
  If INHALT="" Then  
    POSX=POSX+1
    POSY=0
    End If
  ZELLE.Annotation.IsVisible=False
  POSY=POSY+1
Loop Until INHALT=""  

CALC.store
CALC.Close (True)



Gruß waldgnarf

Content-ID: 96287

Url: https://administrator.de/forum/vbscript-loop-2d-klappt-nicht-96287.html

Ausgedruckt am: 23.12.2024 um 13:12 Uhr

bastla
bastla 06.09.2008 um 23:47:26 Uhr
Goto Top
Hallo waldgnarf!

Die Schleife endet, wenn die erste leere Zelle gefunden wird - insofern kann eigentlich nur die erste Zeile bearbeitet werden ...

Wovon Du alternativ das Bearbeitungsende abhängig machen kannst, musst Du selbst wissen - soferne etwa die erste Spalte ausschlaggebend sein sollte (also Ende, wenn die erste Zeile mit einer leeren ersten Zelle gefunden wird), könnte die Zeile 18 etwa so aussehen:
Loop Until BLATT.getCellByPosition(0, POSX).getFormula()=""  
Grüße
bastla
waldgnarf
waldgnarf 07.09.2008 um 19:52:04 Uhr
Goto Top
Danke es klappt, aber ich hab noch mehrere Seiten in dem Dokument.

Do
Set ZELLE=BLATT.getCellByPosition(POSY, POSX)
INHALT=ZELLE.getFormula()

If INHALT="" Then  
POSX=POSX+1
POSY=0

If INHALT="" Then  
INDEX=INDEX+1
POSX=0
End If
End If

BLATT.getCellByPosition(POSY, POSX).Annotation.IsVisible=False
POSY=POSY+1
Loop Until BLATT.getCellByPosition(0, POSX).getFormula()=""  

Kann ich das irgendwie umstellen damit der Script auch die verschiedenen Seiten abklappert?
Biber
Biber 07.09.2008 um 20:59:43 Uhr
Goto Top
Moin waldgnarf,

dann leg doch um die existierende DO...LOOP UNTIL-Anweisung noch eine weitere LOOP herum, die von INDEX=0 bis INDEX=CALC.getSheets().Count()-1 läuft.

Grüße
Biber
bastla
bastla 07.09.2008 um 21:09:38 Uhr
Goto Top
@Biber

Wer ist hier der Rechtsüberholer? face-wink Eben wollte ich waldgnarf fragen, ob mit "Seiten" Tabellenblätter gemeint wären ...

... denn dann könnte er die, wie von Dir beschrieben, aber ev mit
For INDEX = 0 To CALC.Sheets.Count - 1
(vor Zeile 5) und dem zugehörigen
Next
(am Ende des Scripts) einzeln abklappern ...

Grüße
bastla
waldgnarf
waldgnarf 08.09.2008 um 02:02:43 Uhr
Goto Top
Vielen Dank ihr beiden, jetzt klappt es mit dem abklappern. =)

Grüße waldgnarf