Seite 1 von 1
Laufzeitfehler beim Öffnen
Verfasst: Sa, 23.11.2024 14:19
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.
Re: Laufzeitfehler beim Öffnen
Verfasst: Sa, 23.11.2024 18:40
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.
Re: Laufzeitfehler beim Öffnen
Verfasst: So, 24.11.2024 09:38
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.
Re: Laufzeitfehler beim Öffnen
Verfasst: So, 24.11.2024 13:19
von mikeleb
Hallo,
der Knackpunkt ist die Zeile
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.
Re: Laufzeitfehler beim Öffnen
Verfasst: So, 24.11.2024 13:34
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.
Re: Laufzeitfehler beim Öffnen
Verfasst: So, 24.11.2024 13:55
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
anstelle von
bin ich aber schon mal weiter gekommen.
Re: Laufzeitfehler beim Öffnen
Verfasst: So, 24.11.2024 14:22
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.
Re: Laufzeitfehler beim Öffnen
Verfasst: So, 24.11.2024 14:25
von Neandertaler
PS: auch mit
tmp = parameter.Value
funktioniert es nicht.
Re: Laufzeitfehler beim Öffnen
Verfasst: So, 24.11.2024 16:15
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.
Re: Laufzeitfehler beim Öffnen
Verfasst: So, 24.11.2024 16:42
von Neandertaler
Danke, da wäre ich nie drauf gekommen.