Hi, ich versuche, das mittlere Beispiel aus dem SO Programmierhandbuch, Seite 74, nachzubilden. Leider fehlt mir noch Einiges - ich komme alleine nicht darauf, wie der Service "com.sun.star.container.XNameAccess" zu initialisieren ist:
REM Ausgabe aller Tabellen-Namen eines Tabellen-Dokumentes
Sub Test
Dim Sheets As Object
Dim SheetNames
Dim I As Integer
Sheets = Spreadsheet.Sheets
SheetNames = Sheets.getElementNames
For I=LBound(SheetNames) to UBound(SheetNames
Msgbox SheetNames(I)
Next I
End Sub
Schnittstelle (Interface) ansprechen
Moderator: Moderatoren
-
- ****
- Beiträge: 102
- Registriert: Do, 13.05.2004 16:24
- Wohnort: Neuss
Hallo Wolfgang,
Die Beispiele sind nur Codeschnipsel und nicht immer für sich lauffähig. Wesentlich ist, dass du verstehst, worum es geht.
Dein Beispiel ist deswegen nicht lauffähig, weil das Objekt "Spreadsheet" nicht definiert wurde. Füge vor die Zeile Sheets noch dein Dokumentenobjekt ein, nenne diese eben "Spreadsheet" , dann funktioniert es:
Viele Grüsse
Thomas
Die Beispiele sind nur Codeschnipsel und nicht immer für sich lauffähig. Wesentlich ist, dass du verstehst, worum es geht.
Dein Beispiel ist deswegen nicht lauffähig, weil das Objekt "Spreadsheet" nicht definiert wurde. Füge vor die Zeile Sheets noch dein Dokumentenobjekt ein, nenne diese eben "Spreadsheet" , dann funktioniert es:
Code: Alles auswählen
REM Ausgabe aller Tabellen-Namen eines Tabellen-Dokumentes
Sub Test
Dim Spreadsheet as Object
Dim Sheets As Object
Dim SheetNames
Dim I As Integer
Spreadsheet = thisComponent
Sheets = Spreadsheet.Sheets
SheetNames = Sheets.getElementNames
For I=LBound(SheetNames) to UBound(SheetNames
Msgbox SheetNames(I)
Next I
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: 102
- Registriert: Do, 13.05.2004 16:24
- Wohnort: Neuss
Hi, danke für die Ergänzung.
Funktioniert so natürlich. Allerdings hat es mich einige Zeit gebraucht um zu verstehen, dass "Sheets" mit zwei vollkommen unterschiedlichen Bedeutungen in einer Zeile verwendet wird:
Sheets=Spreadsheet.Sheets
Bei "Sheets=.." handelt es sich um eine frei definierte ObjektVariable
Bei ".Sheets" um ein Schlüsselwort !!
Sinnvoller wäre:
Dim oSheet as Object
..
oSheet = Spreadsheet.Sheets
gruss Wolfgang
Funktioniert so natürlich. Allerdings hat es mich einige Zeit gebraucht um zu verstehen, dass "Sheets" mit zwei vollkommen unterschiedlichen Bedeutungen in einer Zeile verwendet wird:
Sheets=Spreadsheet.Sheets

Bei "Sheets=.." handelt es sich um eine frei definierte ObjektVariable
Bei ".Sheets" um ein Schlüsselwort !!
Sinnvoller wäre:
Dim oSheet as Object
..
oSheet = Spreadsheet.Sheets
gruss Wolfgang
Hallo Wolfgang,
wo du recht hast, hast du recht. Das wäre natürlich sinnvoller.
Dieses Objekt kann natürlich den gleichen Namen tragen ("sheets"), auch wenn dies nicht so geschickt ist.
Gruss
Thomas
wo du recht hast, hast du recht. Das wäre natürlich sinnvoller.
"Schlüsselwort " ist wohl nicht ganz richtig, es handelt sich um eine vordefinierte Funktion (eben mit mit Namen "Sheets"), die allerdings nur bei Tabellendokumenten vorhanden ist, und ein Objekt zurückliefert.Bei ".Sheets" um ein Schlüsselwort !!
Dieses Objekt kann natürlich den gleichen Namen tragen ("sheets"), auch wenn dies nicht so geschickt ist.
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: 102
- Registriert: Do, 13.05.2004 16:24
- Wohnort: Neuss
Hi, danke nochmals an alle für die tolle Unterstützung. Kenne das so und in dieser Qualität nicht!! Ich arbeite im Moment an der Umstellung von MS Office nach OO und ohne diese Hinweise wäre es nicht so gut möglich.
Bestimmt kann ich mich in relativ kurzer Zeit ebenso nützlich machen.
Noch ein kleiner Hinweis - bitte Korrektur, wenn ich falsch liege:
"Spreadsheet=StarDesktop.CurrentComponent" ist daher sinnvoller und grundsätzlich zu bevorzugen
gruss Wolf
Bestimmt kann ich mich in relativ kurzer Zeit ebenso nützlich machen.
Noch ein kleiner Hinweis - bitte Korrektur, wenn ich falsch liege:
"Spreadsheet=thisComponent" bezieht sich auf das Spreadsheet, IN DEM DAS MAKRO HINTERLEGT IST. Wenn ich das Makro nun von einem anderen Spreadsheet aus aufrufe, untersucht es die falsche Anwendung.Spreadsheet = thisComponent
--> die "calc-Datei" bzw. das aktuelle modul der StarOffice-Anwendung
"Spreadsheet=StarDesktop.CurrentComponent" ist daher sinnvoller und grundsätzlich zu bevorzugen
gruss Wolf