[Gelöst] Laufzeitfehler nach Verlagerung in Subroutine

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: [Gelöst] Laufzeitfehler nach Verlagerung in Subroutine

Re: Laufzeitfehler nach Verlagerung in Subroutine

von peter999999 » Do, 19.10.2023 20:13

Heureka! 😀

Ich habe jetzt mal sämtliche Libreofficedateien, die noch offen waren, geschlossen und nur die Datei mit dem Makro geöffnet: Es rennt jetzt!

Die Ursache war, dass ich irgendwann mal das XrayTool mal zum Test geöffnet hatte und das immer noch geöffnet war. Starte dich das wieder, tritt auch der Fehler wieder auf.

Die eigentliche Ursache kenne ich zwar immer noch nicht, aber wenigstens den Auslöser 😁

Danke für deine Tipps und deine Geduld!

VG
peter

Re: Laufzeitfehler nach Verlagerung in Subroutine

von peter999999 » Do, 19.10.2023 19:24

Version: 7.4.1.2 (x64) / LibreOffice Community
Build ID: 3c58a8f3a960df8bc8fd77b461821e42c061c5f0
CPU threads: 8; OS: Windows 10.0 Build 19045; UI render: Skia/Raster; VCL: win
Locale: de-DE (de_DE); UI: de-DE
Calc: CL

Re: Laufzeitfehler nach Verlagerung in Subroutine

von mikeleb » Do, 19.10.2023 17:40

Hallo,
den Fehler kann ich nicht nachvollziehen. Bei mir laufen beide Varianten fehlerfrei.
Mit welchem System/Programm/Version arbeitest du?

Re: Laufzeitfehler nach Verlagerung in Subroutine

von peter999999 » Do, 19.10.2023 16:08

Hallo!
Irgendwie verstehe ich jetzt nicht, was du meinst. ich habe mit deiner Testtdatei jetzt zwei Durchläufe gemacht, gestartet wird natürlich immer Sub MAIN:

der hier funktioniert:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main
	odoc=thiscomponent
	otab=odoc.Sheets(0)
oCell = otab.getCellRangeByPosition(0, 0, 3, 50) 'XXXXX
REM Formatieren(otab)
MsgBox "Fertig!"
End Sub

REM Sub Formatieren (oSheet)
REM	Dim oCell As Object
REM MsgBox "Hier bin ich!"
REM	oCell = oSheet.getCellRangeByPosition(0, 0, 3, 50) 'XXXXX
REM end sub

... und der hier nicht, der Laufzeitfehler tritt nach der Dialogbox "Hier bin ich!" auf:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main
	odoc=thiscomponent
	otab=odoc.Sheets(0)
oCell = otab.getCellRangeByPosition(0, 0, 3, 50) 'XXXXX
Formatieren(otab)
MsgBox "Fertig!"
End Sub

Sub Formatieren (oSheet)
Dim oCell As Object
MsgBox "Hier bin ich!"
oCell = oSheet.getCellRangeByPosition(0, 0, 3, 50) 'XXXXX
end sub

:roll:

Re: Laufzeitfehler nach Verlagerung in Subroutine

von Karolus » Do, 19.10.2023 13:52

Hallo
Aber warum
Falls du »formatieren« direkt in der BASIC-ide aufrufst, rufst du die Routine OHNE ARGUMENTE AUF
Du musst die schon aus der Hauptroutine heraus mit dem gewünschten Argument aufrufen

Re: Laufzeitfehler nach Verlagerung in Subroutine

von peter999999 » Do, 19.10.2023 13:39

Ja, danke1 Und wenn ich den selbven Aufruf nach oben in das Hauptprogramm verlege läuft es.

Code: Alles auswählen

Sub Main
	odoc=thiscomponent
	otab=odoc.Sheets(0)
oCell = otab.getCellRangeByPosition(0, 0, 3, 50) 'XXXXX
End Sub

Sub Formatieren (oSheet)
	Dim oCell As Object
	oCell = oSheet.getCellRangeByPosition(0, 0, 3, 50) 'XXXXX
end sub
Aber warum???

Re: Laufzeitfehler nach Verlagerung in Subroutine

von mikeleb » Do, 19.10.2023 13:17

Hallo,
anbei mal ein minimale Testdatei.
Der von dir beschrieben Fehler taucht bei mir (natürlich auch) auf, wenn ich versuche die Sub formatieren direkt aufzurufen.
Dateianhänge
minitest_makro.ods
(8.03 KiB) 63-mal heruntergeladen

Re: Laufzeitfehler nach Verlagerung in Subroutine

von mikeleb » Do, 19.10.2023 13:04

Hallo,
da bleibt die Frage, was sich hinter der Variablen oSheet verbirgt.
Dazu wäre hilfreich, nicht nur das Unterprogramm zu kennen, sondern auch die aufrufende Routine. Sind die Variablen ggf. global definiert?

Code: Alles auswählen

.getCellRangeByPosition(0, 0, 3, 50)
verlangt nach 4 Parametern, die da sind. Also muss es an oSheet liegen ...

Re: Laufzeitfehler nach Verlagerung in Subroutine

von peter999999 » Do, 19.10.2023 12:09

Tell me more ! 🤔

Außerdem tritt der Fehler in folgender Zeile auf:

Code: Alles auswählen

oCell = oSheet.getCellRangeByPosition(0, 0, 3, 50) 'XXXXX
Exakt bder selbe Code funktioniert innerhalb des Hauptprogramms einwadndfrei!

Thx
peter

Re: Laufzeitfehler nach Verlagerung in Subroutine

von Karolus » Mi, 18.10.2023 18:25

peter999999 hat geschrieben: Mi, 18.10.2023 11:22 Der Aufruf ist aber ok:
...
BASIC ist aber anderer Meinung!

Re: Laufzeitfehler nach Verlagerung in Subroutine

von peter999999 » Mi, 18.10.2023 11:22

Hi!

Danke für die Tipps!
Der Aufruf ist aber ok:

Code: Alles auswählen

...
REM 	oSheetx.Rows(N).Height="1300"
REM Next N


BildEinfuegen(oSheetx)
Formatieren(oSheetx)

oDoc2 = StarDesktop.loadComponentFromUrl("private:factory/scalc", "_blank", 0, Args())
oDoc2.StoreAsURL("file:///I:/Bereich2.ods", noArgs())
...

VG
peter

Re: Laufzeitfehler nach Verlagerung in Subroutine

von Karolus » Mi, 18.10.2023 00:15

peter999999 hat geschrieben: Di, 17.10.2023 22:16 Lief vorher im Hauptprogramm einwandfrei, jetzt im Unterprogramm kommt in der Zeile XXXXX die Fehlermeldung "BASIC Laufzeitfehler Argument nicht optional"

Bin ratlos, vorher kein Fehler, jetzt aber weil....???

VG
peter
Weil du im »Hauptprogramm« einfach

Code: Alles auswählen

…
formatieren
…
ohne Argument aufrufst?!!

Im übrigen ist »oCell« ein schlechter Name für einen Zellbereich, die literalen Zahlenwerte müssen nicht in Anführungszeichen gesetzt werden, und die for-Schleife am Ende kannst du ersetzen durch:

Code: Alles auswählen

oSheet.getCellRangeByPosition(0, 2, 0, 50).Rows.Height = 1300

[Gelöst] Laufzeitfehler nach Verlagerung in Subroutine

von peter999999 » Di, 17.10.2023 22:16

Hallo!
Den folgenden Code eines umfangreicheren Makros in LibreOffice habe ich zur Vereinfachung in eine Subroutine gepackt:

Code: Alles auswählen

Sub Formatieren (oSheet)
Dim oCell As Object

oCell = oSheet.getCellRangeByPosition(0, 0, 3, 50) 'XXXXX

oCell.CharFontName="Cambria"
oCell.CharHeight="15"
oSheet.Columns(0).Width="7200"
oSheet.Columns(0).VertJustify=com.sun.star.table.CellVertJustify.CENTER
oSheet.Columns(1).Width="6000"
oSheet.Columns(1).VertJustify=com.sun.star.table.CellVertJustify.CENTER
oSheet.Columns(2).Width="1200"
oSheet.Columns(2).VertJustify=com.sun.star.table.CellVertJustify.CENTER
oSheet.Columns(3).CharHeight=10
oSheet.Columns(3).Width="3000"
oSheet.Columns(4).Width="12000"


For N=2 To 50
    oSheet.Rows(N).Height="1300"
Next N
End Sub
Lief vorher im Hauptprogramm einwandfrei, jetzt im Unterprogramm kommt in der Zeile XXXXX die Fehlermeldung "BASIC Laufzeitfehler Argument nicht optional"

Bin ratlos, vorher kein Fehler, jetzt aber weil....???

VG
peter

Nach oben