Laufzeitfehler beim Öffnen

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

Moderator: Moderatoren

Neandertaler
*
Beiträge: 11
Registriert: Mi, 28.02.2024 23:10

Laufzeitfehler beim Öffnen

Beitrag von Neandertaler »

Ich habe ein relativ einfache Makros mit Excel geschrieben. Wenn ich es mit LibreOffice öffne und als ods abspeichere und dann wieder öffne, kommt die folgende Meldung hoch:

BASIC-Laufzeitfehler.
'91'
Objektvariable nicht belegt.

Es gibt keine weitere Information bzgl. des Problems. Wenn ich die Meldung wegklicke funktionieren die Makros normal. Ich habe geschaut und keine Variable gefunden, die nicht verwendet wird.

Bei LibreOffice will ich keine Einstellungen verändern, da die Datei auch von anderen Personen geöffnet werden darf.
mikeleb
*******
Beiträge: 1347
Registriert: Fr, 09.12.2011 16:50

Re: Laufzeitfehler beim Öffnen

Beitrag von mikeleb »

Hallo,
kommt da noch ein Frage?
Grundsätzlich können Excel-Makros (in VBA) unter Calc funktionieren, aber sicher ist das nicht.
Die Meldung "Objektvariable nicht belegt" heißt nicht, das eine Variable nicht verwendet wird, sondern, dass diese Variable nicht mit einem (dem gwünschten ) Objekt belegt ist. Das würde allerdings bedeuten, dass das MAkro noicht
Für weiteres wäre es sinnvoll, das Makro hier mal vorzustellen.
Gruß,
mikeleb
Neandertaler
*
Beiträge: 11
Registriert: Mi, 28.02.2024 23:10

Re: Laufzeitfehler beim Öffnen

Beitrag von Neandertaler »

Ich konnte den Code eindampfen:

Function meineFunktion(parameter) As Integer

If TypeOf parameter Is Range Then
' parameter = parameter.Value
End If

meineFunktion = 42

End Function

Wenn ich die Funktion mit einem Range-Object aufrufe, funktioniert er. Bei einer Zahl aber nicht.
mikeleb
*******
Beiträge: 1347
Registriert: Fr, 09.12.2011 16:50

Re: Laufzeitfehler beim Öffnen

Beitrag von mikeleb »

Hallo,
der Knackpunkt ist die Zeile

Code: Alles auswählen

parameter = parameter.Value
Die Variable parameter stellt zunächst ein object dar. Nun versuchst du die Variable neu als Zahl festzulegen. Das geht schief.
Daher muss es umprogrammiert werden.
Was willst du mit deiner Funktion erreichen? Es könnte auch einfacher sein, uns das ganze Makro zu zeigen.
Gruß,
mikeleb
Neandertaler
*
Beiträge: 11
Registriert: Mi, 28.02.2024 23:10

Re: Laufzeitfehler beim Öffnen

Beitrag von Neandertaler »

Die Zeile
' parameter = parameter.Value
ist eigentlich auskommentiert.

Ich will, dass man die Funktion sowohl mit einer Zahl oder mit der Angabe einer Zelle funktioniert. Es soll sowohl für Excel als auch für LibreOffice funktionieren.
mikeleb
*******
Beiträge: 1347
Registriert: Fr, 09.12.2011 16:50

Re: Laufzeitfehler beim Öffnen

Beitrag von mikeleb »

Hallo,
Es soll sowohl für Excel als auch für LibreOffice funktionieren.
Das wird grundsätzlich schwierig, da bei jedem Öffnen/Schließen die Datei in die verschiednenen Formate konvertiert werden wird.
Mit

Code: Alles auswählen

	if vartype(parameter)=9 then
anstelle von

Code: Alles auswählen

If TypeOf parameter Is Range Then
bin ich aber schon mal weiter gekommen.
Gruß,
mikeleb
Neandertaler
*
Beiträge: 11
Registriert: Mi, 28.02.2024 23:10

Re: Laufzeitfehler beim Öffnen

Beitrag von Neandertaler »

Das mit verschieden Formaten ist zwar hässlich aber das kann ich noch verkaufen.

Ich konnte die if-Abfrage
if typename(parameter)="Range" then
verwenden.

Jetzt knallt es aber mit

if vartype(parameter)=9 then
' msgbox(typename(parameter))
dim tmp as integer
tmp = parameter.Value2
End Ifnem

Obwohl es sich dabei um einen Double Wert handelt. Ich habe vor der if-Abfrage eine msgBox eingebaut, die aber nicht aufgerufen wird. Sieht also nicht so recht nach einem Laufzeitfehler aus.
Neandertaler
*
Beiträge: 11
Registriert: Mi, 28.02.2024 23:10

Re: Laufzeitfehler beim Öffnen

Beitrag von Neandertaler »

PS: auch mit
tmp = parameter.Value
funktioniert es nicht.
mikeleb
*******
Beiträge: 1347
Registriert: Fr, 09.12.2011 16:50

Re: Laufzeitfehler beim Öffnen

Beitrag von mikeleb »

Hallo,
ich vermute mal, dass es damit zusammenhängt, dass in StarBasic die Argumente als Referenz übergeben werden. Wie das in VBA war, weiß ich gerade nicht mehr.
In der Form lässt sich die Funktion sowohl mit einem Objekt als auch einer Zahl aufrufen.

Code: Alles auswählen

function meinefkt(parameter) as integer
	test=parameter	

	if vartype(parameter)=9 then
		wert=test.value
	end if
	meinefkt=42
end function
Um die ganze Problematik zu umgehen, würde ich die Unterscheidung zwischen Wert bzw. Objekt vor dem Aufruf der Funktion erledigen.
Gruß,
mikeleb
Neandertaler
*
Beiträge: 11
Registriert: Mi, 28.02.2024 23:10

Re: Laufzeitfehler beim Öffnen

Beitrag von Neandertaler »

Danke, da wäre ich nie drauf gekommen.
Antworten