Seite 1 von 1

StarBasic Problemchen mit StarDesktop.CurrentComponent

Verfasst: Di, 21.06.2005 15:21
von dexter2000
Hallo Zusammen,

ich komme aus der VBA -Ecke und habe ein kleines Verständnis Problem mit StarDesktop.CurrentComponent.

Ich möchte in Calc ein Makro schreiben. Nachdem ich mich in der Doku etwas eingelesen hatte (neues Objektmodell und so) wollte ich starten und mein eigenes Makro schreiben.

Wenn ich aus Calc den Basic-Editor starte und mit folgenden Zeilen auf die Anwendung Calc bzw. die einzelen Sheets und Zellen zugreifen möchte. Bekomme ich einen Fehler.

Code: Alles auswählen

	Doc = StarDesktop.CurrentComponent	
	Sheet = Doc.Sheets.getByName("Sheet1")
Es liegt wahrscheinlich daran das Doc keine Instanz von Calc ist sonder einen Instanz von der Basic IDE (com.sun.star.comp.basic.BasicIDE), oder?

Wie kann ich dann Makros in der IDE testen?

Noch ein paar Fragen:

Greife ich dann mit folgender Zeile auf einzelne Zellen zu?

Code: Alles auswählen

Sheet.cells(1,1)
Wo finde ich in der IDE einen Object Browers ala VB-Editor?

Gibt es sowas wie IntelliSense? (Plug-In?)

Vielen Dank

Verfasst: Fr, 24.06.2005 09:09
von Toxitom
Hey Dexter2000,
... kleines Verständnis Problem mit StarDesktop.CurrentComponent.
OK, das ist auch ein wenig verwirrend. StarDesktop.CurrentComponet liefert dir stets das Objekt der aktuell aktiven Anwendung, in deinem Fall also die Basic-IDE - und dort geht dein Calc-Befehl natürlich nicht. Die Basic-Ide hat keine Sheets :-)
Würdest du den Code aus der Calc-Anwendung aufrufen (über das Menü oder über einen Button), würde er funktionieren, da jetzt das Calc-Dokument als Objekt zurückgeliefert wird.

Diese "Falle" kannst du umgehen mit der vorbelegten Varaiblen ThisComponent. Diese bezieht sich immer auf die letzte, aktive Modulvariante, Hilfefenster, Basic-IDE etc sind außen vor. Wenn du also schreibst:

Code: Alles auswählen

Doc = thisComponent   
   Sheet = Doc.Sheets.getByName("Sheet1")
kannst du den Code auch in der IDE testen. Zurückgeliefert wird jetzt das Calc-Dokument (falls dies das letzte aktive war). Und natürlich funktioniert der Code auch, wenn es später aus dem Dokument aufrufst.

Zellen:
Dien Code funktioniert nicht. Um auf einzelene Zellen zuzugreifen benötigst du ein Rangeobjekt (ist aber anders definiert al in VBA. Also: die Zelle erhälst du :

Code: Alles auswählen

Sheet.getCellByPosition(1,1)  'liefert die Zelle B2 (Indexe beginnen bei 0)
oder über den namenszugriff:

Code: Alles auswählen

sheet.getCellRangebyName("B2")
Weitere Fragen:
Wo finde ich in der IDE einen Object Browers ala VB-Editor?
Gar nicht. OOo hat soetwas (leider) nicht. Es gibt drei Methoden, um Objekte zu inspizieren:
dbg_properties, dbg_methods und dbg_supportedInterfaces, die können helfen. Ansonsten: Ein gutes Buch, ein gutes Tool und der Rest ist "lerning by doing".
Ein Buch: Makros für OOo 2.0, von mir, ab August im Handel (siehe Vereinsseite).
Ein Tool: devGuide, ein Objektinspektor - musst du mal auf der Homesiite von OOo suchen.
Der Rest.... das bekommst du selbst hin :-)

Gruss
Thomas