[gelöst] objektvariable nicht belegt!

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

nicrnicr
*
Beiträge: 14
Registriert: Mo, 15.03.2021 19:03

[gelöst] objektvariable nicht belegt!

Beitrag von nicrnicr »

Hallo allerseits,

ich fange mit der Programmierung an. Mein Ziel ist es, einen Bereich von einer Blatt zu einer anderen zu kopieren. So ein Makro habe ich im Netz gefunden. Es heißt:

Code: Alles auswählen

Sub Main
 Dim ueb 'Die übertragbaren Daten
 Dim oSheet 'Tabellenblatt
 Dim oRange 'Zellbereich
 Dim Buchhaltung 'Dokument

 oRange = Buchhaltung.Sheets(6).getCellRangeByName("C3:C4")
 Buchhaltung.CurrentController.select(oRange)
 ueb = Buchhaltung.CurrentController.getTransferable()

 oRange = Buchhaltung.Sheets(0).getCellRangeByName("B14")
 Buchhaltung.CurrentController.select(oRange)
 Buchhaltung.CurrentController.insertTransferable(ueb)

End Sub
Jedoch, jedes Mal, dass ich ihn ausführe, bekomme ich die „Objektvariable nicht belegt"-Meldung für die folgende Zeile:

Code: Alles auswählen

oRange = Buchhaltung.Sheets(6).getCellRangeByName("C3:C4")
Kann mir jemand bitte helfen?
Zuletzt geändert von nicrnicr am Di, 16.03.2021 16:23, insgesamt 1-mal geändert.
cwolan
**
Beiträge: 47
Registriert: Sa, 06.03.2021 12:56

Re: objektvariable nicht belegt!

Beitrag von cwolan »

Du bekommst „Objektvariable nicht belegt"-Meldung, weil die Variable "Buchhaltung" nicht spezifiert wurde.

Code: Alles auswählen

(...)

Dim Buchhaltung 'Dokument

Buchhaltung = ThisComponent

oRange = Buchhaltung.Sheets(6).getCellRangeByName("C3:C4")
Buchhaltung.CurrentController.select(oRange)
ueb = Buchhaltung.CurrentController.getTransferable()

(...)
OpenOffice 1.1.5 – 4.1.15
LibreOffice 6.4.7 – 7.6.5
Windows 7,10,11 64-bit
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: objektvariable nicht belegt!

Beitrag von craig22 »

Hallo,

wie cwolan bereits schrieb, fehlt die Referenzierung der Objektvariablen "Buchhaltung"

Ich gehe noch eine Schritt weiter, denn die Deklaration Deiner Variablen sind alle unzureichend,
weil diese intern vom Datentyp "Variant" deklariert sind.

Deklariere die Variablen korrekt, besonders die Objektvariablen.

Damit ich in meinen Code weiß, was ich als Objektvariable oder sonst wie deklariert habe,
verwende ich Präfixe, wie auf dieser Seite beschrieben:
https://wiki.openoffice.org/wiki/DE/Mak ... #Variablen

Code: Alles auswählen

Option Explicit

Sub Main
 Dim oUeb as Object  					'Die übertragbaren Daten
 Dim oSheet0 as Object, oSheet6 as Object 	'Tabellenblatt
 Dim oRange  as Object					'Zellbereich
 Dim oBuchhaltung  as Object				'Dokument

	oBuchhaltung=ThisComponent
'xray oBuchhaltung
		oSheet6=oBuchhaltung.getSheets().getByIndex(6)
'xray oSheet
		 oRange = oSheet6.getCellRangeByName("C3:C4")
'xray oRange
			oBuchhaltung.CurrentController.select(oRange)
				oUeb = oBuchhaltung.CurrentController.getTransferable()
'xray oUeb
	oSheet0=oBuchhaltung.getSheets().getByIndex(0)
 	oRange = oSheet0.getCellRangeByName("B14")
		oBuchhaltung.CurrentController.select(oRange)
			oBuchhaltung.CurrentController.insertTransferable(oUeb)

End Sub
Ausserdem setze ich in die erste Zeile des Makros die Anweisung "Option Explicit", dadurch
wird man gezwungen richtig zu deklarieren und alle Varaiblen werden z.B. auf die korrekte
schreibweise und den korrekten Datentyp hin geprüft.

Installiere Dir das Xray-Tool zwecks Codeinspektion.
Ebenfalls erhältlich auf oben verlinter Seite. Es handelt sich dabei um ein Writer-Dokument, welches
die Makros zur Installations enthält und es ist gleichzeitig die Dokumentation zu Xray.

Nach der Installation lese unbedingt Seite 7 der Doku, dort wird beschrieben wie
Du Xray bei jedem Officestart automatisch laden kannst.

Die vielen 'xray ... in meinem Code sollen für Dich eine Hilfe sein, wie man Xray anwenden kann.
Entferne das Hochkomma vor Xray und starte das Makro, dann öffnet sich an der betreffenden
Stelle ein Xray-Fenster:

Code: Alles auswählen

xray oUeb
Hier zeigt Xray an, das "oUeb" ein Objekt ist, erkennbar darin, das die Variable
verschiedene Eigenschaften, Methoden, usw. beinhaltet.

Teste dies mit Xray:

Code: Alles auswählen

Sub Test
Dim nX as Integer

nx= 12
xray nX

End Sub
Beachte, dass Methoden, Services, Interfaces, usw. ausgegraut sind.
Demnach ist diese Variable kein Objekt, Service oder Interface, welches man
per Konvention mit einem vorangestellten "o" kennzeichnen würde.
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
nicrnicr
*
Beiträge: 14
Registriert: Mo, 15.03.2021 19:03

Re: objektvariable nicht belegt!

Beitrag von nicrnicr »

Hallo cwolan & Craig,
ich bedanke mich herzlich für ihre umfangreiche Hilfe!!
GlG
nicrnicr
*
Beiträge: 14
Registriert: Mo, 15.03.2021 19:03

Re: objektvariable nicht belegt!

Beitrag von nicrnicr »

PS: Ich lerne Schritt für Schritt. Erstmal versuche ich das ganze Makro in Ordnung zu haben, dann mache ich mich mit xray schlau.
craig22
****
Beiträge: 135
Registriert: Mi, 19.08.2020 13:47

Re: objektvariable nicht belegt!

Beitrag von craig22 »

Hallo,

hier gibt es ein sehr nützliches Buch:
https://de.openoffice.info/viewtopic.php?f=18&t=75273

und diese Seite hat auch reichaltige Informationen:
http://www.dannenhoefer.de/faqstarbasic/index.html
Gruß

Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Antworten