Kann man 2mal If-Then-Else in einem Makro verwenden?

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

Moderator: Moderatoren

junmod
**
Beiträge: 31
Registriert: Di, 07.02.2012 09:06

Kann man 2mal If-Then-Else in einem Makro verwenden?

Beitrag von junmod »

Hallo Forum,

ich habe in einem Makro bereits eine If-Then-Else Verzweigung eingebaut, nun wollte ich nach dem End If mit einer msgbox etwas abfragen und brauche dafür eigentlich wieder eine If-Then-Else Verzweigung, nur funktioniert das irgendwie nicht. :(

Ist das überhaupt möglich zwei- oder mehrmals eine If-Then-Else Verzweigung in ein Makro zu packen?

Über eine Antwort würde ich mich sehr freuen.

Gruss
Dirk
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: Kann man 2mal If-Then-Else in einem Makro verwenden?

Beitrag von theindless »

Hallo,

also prinzipiell dürfte das überhaupt kein Problem sein, 2 x If-Then-Else in 1 Macro zu verwenden.

Geholfen werden kann dir hier aber nur, wenn du die Datei als Beispiel zur Verfügung stellst (beste Variante) oder deinen Code detailliert beschreibst.

theindless
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
junmod
**
Beiträge: 31
Registriert: Di, 07.02.2012 09:06

Re: Kann man 2mal If-Then-Else in einem Makro verwenden?

Beitrag von junmod »

Hallo theindless,

hier mal mein Makro:

Code: Alles auswählen

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

Sub BestellungSpeichernUndVersenden

REM Definition der Variablen
Dim document as Object
Dim dispatcher as Object
Dim stringname as String
Dim PDFempfText as String
Dim ODScalc as Object
Dim strAttPfad As String

Calc = ThisComponent
Sheet = Calc.Sheets(0)

REM Bestellnummer finden
Cell = Sheet.GetCellRangeByName("AE9")
StringName = Cell.String

REM Seitenzahl ermitteln
CCell = Sheet.GetCellRangeByName("AG10")
ZStringName = CCell.String

REM Empfängername finden
CCCell = Sheet.GetCellRangeByName("A10")
PDFempfString = CCCell.String

REM Dokumentenzugriff
document   = ThisComponent.CurrentController.Frame
dispatcher = CreateUnoService("com.sun.star.frame.DispatchHelper")

REM Wenn Bestellung 1-seitig
If ZStringName = "0" then

REM Druckbereich für 1 Seite
dim args121(1) as new com.sun.star.beans.PropertyValue
args121(0).Name = "Nr"
args121(0).Value = 1

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args121())

dim args10(1) as new com.sun.star.beans.PropertyValue
args10(0).Name = "ToPoint"
args10(0).Value = "$A$1:$AF$61"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args10())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())

REM Ausdruck Seite 1
dim args99(3) as new com.sun.star.beans.PropertyValue
args99(0).Name = "Copies"
args99(0).Value = 1
args99(1).Name = "Collate"
args99(1).Value = true
args99(2).Name = "Selection"
args99(2).Value = true

dispatcher.executeDispatch(document, ".uno:Print", "", 0, args99())

REM PDF-Export
dim args11(1) as new com.sun.star.beans.PropertyValue
args11(0).Name = "URL"
args11(0).Value = "file:///D:/PDF-Bestellungen/Bestellung." & stringname & ".pdf"
args11(1).Name = "FilterName"
args11(1).Value = "calc_pdf_Export"

dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args11())

REM Druckbereich entfernen
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args10())
dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array()

REM Wenn Bestellung 2-seitig
Else

REM Druckbereich Seite 1
dim args221(1) as new com.sun.star.beans.PropertyValue
args221(0).Name = "Nr"
args221(0).Value = 1

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args221())

dim args20(1) as new com.sun.star.beans.PropertyValue
args20(0).Name = "ToPoint"
args20(0).Value = "$A$1:$AF$61"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args20())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())

REM Ausdruck Seite 1
dim args100(6) as new com.sun.star.beans.PropertyValue
args100(0).Name = "Copies"
args100(0).Value = 1
args100(1).Name = "Collate"
args100(1).Value = true
args100(2).Name = "Selection"
args100(2).Value = true
args100(3).Name = "Pages"
args100(3).Value = 1
args100(4).Name = "Sort"
args100(4).Value = true
args100(5).Name = "Wait"
args100(5).Value = true

dispatcher.executeDispatch(document, ".uno:Print", "", 0, args100())

REM Druckbereich Seite 2
dim args21(1) as new com.sun.star.beans.PropertyValue
args21(0).Name = "Nr"
args21(0).Value = 2

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args21())

dim args22(1) as new com.sun.star.beans.PropertyValue
args22(0).Name = "ToPoint"
args22(0).Value = "$A$1:$AF$61"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args22())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())

REM Ausdruck Seite 2
dim args101(6) as new com.sun.star.beans.PropertyValue
args101(0).Name = "Copies"
args101(0).Value = 1
args101(1).Name = "Collate"
args101(1).Value = true
args101(2).Name = "Selection"
args101(2).Value = true
args101(3).Name = "Pages"
args101(3).Value = 2
args101(4).Name = "Sort"
args101(4).Value = true
args101(5).Name = "Wait"
args101(5).Value = true

dispatcher.executeDispatch(document, ".uno:Print", "", 0, args101())

REM PDF-Export
Datei =  "file:///D:/PDF-Bestellungen/Bestellung." & stringname & ".pdf"
dim pdfproperties(1) as new com.sun.star.beans.PropertyValue
pdfproperties(1).Name = "FilterName"
pdfproperties(1).Value = "calc_pdf_Export"

ThisComponent.StoreToUrl( Datei, pdfproperties())
StrAttPfad = ThisComponent.GetUrl ("file:///D:/PDF-Bestellungen/Bestellung." & stringname & ".pdf")

REM Druckbereiche entfernen
dim args23(1) as new com.sun.star.beans.PropertyValue
args23(0).Name = "ToPoint"
args23(0).Value = "$A$1:$AF$61"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args23())
dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array())

dim args24(1) as new com.sun.star.beans.PropertyValue
args24(0).Name = "Nr"
args24(0).Value = 2

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args24())

dim args25(1) as new com.sun.star.beans.PropertyValue
args25(0).Name = "ToPoint"
args25(0).Value = "$A$1:$AF$61"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args25())

dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array())

End If

REM ODS-Datei speichern
ODScalc = ThisComponent
ODScalc.Store()

REM Messagebox
PDFempfText = "Die Bestellung Nr. " & stringname & " an " & PDFempfString
msgbox PDFempftext & " wurde erfolgreich gespeichert und wird gedruckt!" & CHR13 & "Soll die Bestellung jetzt verschickt werden?", 36, "Herzlichen Glückwunsch!"
Jetzt sollte eigentlich mit der Antwort Ja, also " If Antwort = 6 then " das e-mail Fenster mit folgendem Code geöffnet werden

Code: Alles auswählen

REM gespeicherte PDF senden
Dim strAn As String
Dim strBetr As String
Dim strBody As String

Dim strThunderPfad As String
Dim strShell As String

strThunderPfad = """C:\Programme\Mozilla Thunderbird\Thunderbird.exe"""

mDoc = thisComponent
mSheet = mDoc.sheets(0)
mCell = mSheet.getCellRangeByName("AH17")
mStran = mCell.String

strAn = mStran
strBetr = "Bestellung Nr. " & stringname
strBody = "&#160;<br>Sehr geehrte Damen und Herren&#130;<p>im Anhang finden Sie unsere&#160;" & strBetr & "&#160;im PDF-Format&#046;<p>Mit freundlichen Gr&#252;&#223;en<p>"

strShell = strThunderPfad & _
"-compose " & _
"to='" & strAn & "'," & _
"subject='" & strBetr & "'," & _
",body=" & strBody & _
",attachment=" & ("file:///D:/PDF-Bestellungen/Bestellung." & stringname & ".pdf")

Call Shell(strShell, vbNormalFocu)
Andernfalls soll bei Antwort Nein mit " ElseIf Antwort = 7 then " das Makro beendet werden, um weiter am Dokument arbeiten zu können.

Ich habe es schon auf verschiedenste Weise probiert zu schreiben, auch wenn ich nicht genau weiß wie der Befehl für Makroende lautet, habe bei "nein" nochmal versucht eine msgbox aufzurufen, aber irgendetwas ging immer schief. Entweder hat das Makro bei beiden Antworten versucht zu senden, oder im Gegenteil überhaupt nichts gemacht und dann wurde auch nicht mehr das gedruckt was ich wollte, also das aus dem ersten If-Then-Else.

Mir raucht der K :? opf
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: Kann man 2mal If-Then-Else in einem Makro verwenden?

Beitrag von theindless »

Hallo,

das Problem ist, dass du nicht wirklich die Rückmeldung der MsgBox abfragst.

Dazu müsstest du den Rückgabewert der msgbox in eine Variable schreiben (ich nehme im Beispiel mal "answer") und diese dann mit if.... auswerten.

Code: Alles auswählen

answer = msgbox (PDFempftext & " wurde erfolgreich gespeichert und wird gedruckt!" & CHR13 & "Soll die Bestellung jetzt verschickt werden?", 36, "Herzlichen Glückwunsch!")

If answer = 6 then .... else .... end if
Probiers mal so... ich hatte nur ein vereinfachtes Beispiel getestet.

theindless
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
junmod
**
Beiträge: 31
Registriert: Di, 07.02.2012 09:06

Re: Kann man 2mal If-Then-Else in einem Makro verwenden?

Beitrag von junmod »

Hallo Theindless,

ich hab es mal so probiert, aber der Druckbefehl wird komischerweise nicht mehr korrekt ausgeführt, d.h. es wird manchmal nur die 2. Seite gedruckt.

Code: Alles auswählen

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

Sub BestellungSpeichernUndVersenden

REM Definition der Variablen
Dim document as Object
Dim dispatcher as Object
Dim stringname as String
Dim PDFempfText as String
Dim ODScalc as Object
Dim strAttPfad As String

Calc = ThisComponent
Sheet = Calc.Sheets(0)

REM Bestellnummer finden
Cell = Sheet.GetCellRangeByName("AE9")
StringName = Cell.String

REM Seitenzahl ermitteln
CCell = Sheet.GetCellRangeByName("AG10")
ZStringName = CCell.String

REM Empfängername finden
CCCell = Sheet.GetCellRangeByName("A10")
PDFempfString = CCCell.String

REM Dokumentenzugriff
document   = ThisComponent.CurrentController.Frame
dispatcher = CreateUnoService("com.sun.star.frame.DispatchHelper")

REM Wenn Bestellung 1-seitig
If ZStringName = "0" then

REM Druckbereich für 1 Seite
dim args121(1) as new com.sun.star.beans.PropertyValue
args121(0).Name = "Nr"
args121(0).Value = 1

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args121())

dim args10(1) as new com.sun.star.beans.PropertyValue
args10(0).Name = "ToPoint"
args10(0).Value = "$A$1:$AF$61"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args10())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())

REM Ausdruck Seite 1
dim args99(3) as new com.sun.star.beans.PropertyValue
args99(0).Name = "Copies"
args99(0).Value = 1
args99(1).Name = "Collate"
args99(1).Value = true
args99(2).Name = "Selection"
args99(2).Value = true

dispatcher.executeDispatch(document, ".uno:Print", "", 0, args99())

REM PDF-Export
dim args11(1) as new com.sun.star.beans.PropertyValue
args11(0).Name = "URL"
args11(0).Value = "file:///D:/PDF-Bestellungen/Bestellung." & stringname & ".pdf"
args11(1).Name = "FilterName"
args11(1).Value = "calc_pdf_Export"

dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args11())

REM Druckbereich entfernen
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args10())
dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array()

REM Wenn Bestellung 2-seitig
Else

REM Druckbereich Seite 1
dim args221(1) as new com.sun.star.beans.PropertyValue
args221(0).Name = "Nr"
args221(0).Value = 1

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args221())

dim args20(1) as new com.sun.star.beans.PropertyValue
args20(0).Name = "ToPoint"
args20(0).Value = "$A$1:$AF$61"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args20())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())

REM Ausdruck Seite 1
dim args100(6) as new com.sun.star.beans.PropertyValue
args100(0).Name = "Copies"
args100(0).Value = 1
args100(1).Name = "Collate"
args100(1).Value = true
args100(2).Name = "Selection"
args100(2).Value = true
args100(3).Name = "Pages"
args100(3).Value = 1
args100(4).Name = "Sort"
args100(4).Value = true
args100(5).Name = "Wait"
args100(5).Value = true

dispatcher.executeDispatch(document, ".uno:Print", "", 0, args100())

REM Druckbereich Seite 2
dim args21(1) as new com.sun.star.beans.PropertyValue
args21(0).Name = "Nr"
args21(0).Value = 2

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args21())

dim args22(1) as new com.sun.star.beans.PropertyValue
args22(0).Name = "ToPoint"
args22(0).Value = "$A$1:$AF$61"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args22())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())

REM Ausdruck Seite 2
dim args101(6) as new com.sun.star.beans.PropertyValue
args101(0).Name = "Copies"
args101(0).Value = 1
args101(1).Name = "Collate"
args101(1).Value = true
args101(2).Name = "Selection"
args101(2).Value = true
args101(3).Name = "Pages"
args101(3).Value = 2
args101(4).Name = "Sort"
args101(4).Value = true
args101(5).Name = "Wait"
args101(5).Value = true

dispatcher.executeDispatch(document, ".uno:Print", "", 0, args101())

REM PDF-Export
Datei =  "file:///D:/PDF-Bestellungen/Bestellung." & stringname & ".pdf"
dim pdfproperties(1) as new com.sun.star.beans.PropertyValue
pdfproperties(1).Name = "FilterName"
pdfproperties(1).Value = "calc_pdf_Export"

ThisComponent.StoreToUrl( Datei, pdfproperties())
StrAttPfad = ThisComponent.GetUrl ("file:///D:/PDF-Bestellungen/Bestellung." & stringname & ".pdf")

REM Druckbereiche entfernen
dim args23(1) as new com.sun.star.beans.PropertyValue
args23(0).Name = "ToPoint"
args23(0).Value = "$A$1:$AF$61"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args23())
dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array())

dim args24(1) as new com.sun.star.beans.PropertyValue
args24(0).Name = "Nr"
args24(0).Value = 2

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args24())

dim args25(1) as new com.sun.star.beans.PropertyValue
args25(0).Name = "ToPoint"
args25(0).Value = "$A$1:$AF$61"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args25())

dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array())

End If

REM ODS-Datei speichern
ODScalc = ThisComponent
ODScalc.Store()

REM Messagebox
PDFempfText = "Die Bestellung Nr. " & stringname & " an " & PDFempfString
Antwort = msgbox (PDFempftext & " wurde erfolgreich gespeichert und wird gedruckt!" & CHR13 & "Soll die Bestellung jetzt verschickt werden?", 36, "Herzlichen Glückwunsch!")

REM Wenn Antwort Ja
If Antwort = 6 Then

REM gespeicherte PDF senden
Dim strAn As String
Dim strBetr As String
Dim strBody As String

Dim strThunderPfad As String
Dim strShell As String

strThunderPfad = """C:\Programme\Mozilla Thunderbird\Thunderbird.exe"""

mDoc = thisComponent
mSheet = mDoc.sheets(0)
mCell = mSheet.getCellRangeByName("AH17")
mStran = mCell.String

strAn = mStran
strBetr = "Bestellung Nr. " & stringname
strBody = "&#160;<br>Sehr geehrte Damen und Herren&#130;<p>im Anhang finden Sie unsere&#160;" & strBetr & "&#160;im PDF-Format&#046;<p>Mit freundlichen Gr&#252;&#223;en<p>"

strShell = strThunderPfad & _
"-compose " & _
"to='" & strAn & "'," & _
"subject='" & strBetr & "'," & _
",body=" & strBody & _
",attachment=" & ("file:///D:/PDF-Bestellungen/Bestellung." & stringname & ".pdf")

Call Shell(strShell, vbNormalFocu)

REM Wenn Antwort Nein
Else

End

End If

End Sub
Woran kann das liegen?
theindless
*****
Beiträge: 355
Registriert: So, 09.05.2010 12:37

Re: Kann man 2mal If-Then-Else in einem Makro verwenden?

Beitrag von theindless »

Hallo,
Woran kann das liegen?
Da bin ich ehrlich gesagt überfragt.

Nachdem die von mir vorgeschlagenen Änderungen im Macro NACH dem Drucken erst ausgeführt werden, kann/sollte dies eigentlich auf das Drucken keine Auswirkungen haben.

Leider kann ich zum Druckproblem nichts sagen.... da habe ich keine Erfahrung mit.

theindless
Lernbegieriger Nutzer mit (hoffentlich) steigendem Wissen
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Kann man 2mal If-Then-Else in einem Makro verwenden?

Beitrag von balu »

Hallo Dirk,

ich hab mir nur deinen letzten geposteten Makro-Code angeschaut, mehr nicht. Jedoch sind mir da ein paar Sachen aufgefallen, die mich ein wenig stutzig machen. Und das ist alles am Ende des Cods zu finden.

Code: Alles auswählen

Call Shell(strShell, vbNormalFocu)
Warum rufst Du die SHELL via CALL auf?
Und wo in diesem Makro wird vbNormalFocu defeniert, deklariert zugewiesen? Ich find dazu nichts.

Da Du das in der zweiten "If...Then" nach "else" eingebaut hast, würd ich mal sagen das dies nicht gut ist. Diese meine Behauptung beruht auf der Aussage von der Hilfe.
OOo-Online Hilfe (F1) hat geschrieben: End : Ist niemals erforderlich, kann aber an einer beliebigen Stelle innerhalb einer Prozedur angegeben werden, um den Programmablauf zu stoppen.
Das letzte Wort, stoppen, macht mich da doch etwas misstrauisch, da ja dort nicht die Rede von beenden ist. Und beenden und stoppen sind ja nun mal zweierlei Dinge.

Kann aber auch sein das die ersteller der Hilfe sich dort etwas falsch ausgedrückt haben, was ja nicht das erstemal wäre.

auch wenn ich nicht genau weiß wie der Befehl für Makroende lautet
Wenn Du jetzt mit Makroende das Ende einer Sub meinst, dann schlicht und einfach: End Sub


Ich weiß das ich jetzt dein Problem nicht beseitigen konnte, aber auch solche kleinigkeiten können Probleme verursachen die eventuell sehr schwer zu finden und zu beseitigen sind.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
junmod
**
Beiträge: 31
Registriert: Di, 07.02.2012 09:06

Re: Kann man 2mal If-Then-Else in einem Makro verwenden?

Beitrag von junmod »

Hallo,

@ theindless: Genau den gleichen Gedanken hatte ich auch, der Druckbefehl ist eigentlich früher dran und dürfte nicht beeinflusst werden...................... :?

@ balu: Das mit dem "Call Shell hab" ich so von einem anderen makro übernommen, keine Ahnung wofür oder warum es dort steht, aber ohne geht's nicht. Anstatt dem "End" habe ich auch schon ander Sachen probiert, z.B das der Coursor in eine bestimmte Zelle springt, damit ich dort mit den Eintragungen fortfahren kann, aber da hatte ich das gleiche Problem.

@ beide: Könnte es sein, dass mein "zusammengebasteltes" makro an irgendeiner Stelle "instabil" ist, dass z.B. die Definition oder das Löschen der Druckbereiche nicht immer korrekt funktionert? Wie gesagt ich bin Anfänger und das ist nur eine Vermutung.

MfG
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Kann man 2mal If-Then-Else in einem Makro verwenden?

Beitrag von balu »

Hallo Dirk,
Das mit dem "Call Shell hab" ich so von einem anderen makro übernommen, keine Ahnung wofür oder warum es dort steht, aber ohne geht's nicht.
CALL & SHELL kannst Du z.B. in der Online-Hilfe (F1) nachlesen.
Aber das es ohne CALL nicht funktioniert, kann ich mir so nicht wirklich vorstellen da der Code-Schnipsel nicht ausreichend ist.

Könnte es sein, dass mein "zusammengebasteltes" makro an irgendeiner Stelle "instabil" ist,
Nun ja. Jeder fängt irgendwie mit irgendwas mal klein an. Und von daher bleiben bestimmte Fehler, zwecks fehlendem Wissen, einfach nicht aus. -{davon kann ich aktuell auch ein Liedchen singen}-
Was mir aber grad eben aufgefallen ist, das hat auch was mit dem Thema "Druckbereich" zu tun, ist nämlich folgendes.

Code: Alles auswählen

REM Druckbereich für 1 Seite
dim args121(1) as new com.sun.star.beans.PropertyValue
args121(0).Name = "Nr"
args121(0).Value = 1
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args121())
Da steckt schon mal ein Fehler drin.
args121(1) ist mit 1 deklariert. Und das bedeutet: das genau 2 Argumente, 0 und 1, erwartet (verlangt) werden. Jedoch wendest Du aber nur 1 Argument (0) an, was schon mal nicht gut ist. Richtig wäre nämlich nicht nur an dieser Stelle; args121(0).

Bedenke und Beachte unbedingt folgendes!
Bei der deklaration von Variablen, in diesem Falle, fängt die Zählung mit 0 an.
Das heißt: 0 ist der 1. Parameter, 1 ist der 2. Parameter, usw...

Dieser Fehler tritt nicht nur einmal auf, sondern er zieht sich wie ein Roter Faden duch das gesamte Makro. Du deklarierst die Variablen (Argumente) zu groß!
Hier noch ein Beispiel.

Code: Alles auswählen

REM Ausdruck Seite 1
dim args100(6) as new com.sun.star.beans.PropertyValue
args100(0).Name = "Copies"
args100(0).Value = 1
args100(1).Name = "Collate"
args100(1).Value = true
args100(2).Name = "Selection"
args100(2).Value = true
args100(3).Name = "Pages"
args100(3).Value = 1
args100(4).Name = "Sort"
args100(4).Value = true
args100(5).Name = "Wait"
args100(5).Value = true

dispatcher.executeDispatch(document, ".uno:Print", "", 0, args100())
args100 ist auch hier viel zu groß deklariert! Richtig wäre: args100(5)


Jetzt noch mal zu deinem Druckbereich im Makro.

Code: Alles auswählen

REM Druckbereich für 1 Seite
dim args121(1) as new com.sun.star.beans.PropertyValue
args121(0).Name = "Nr"
args121(0).Value = 1
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args121())
dim args10(1) as new com.sun.star.beans.PropertyValue
args10(0).Name = "ToPoint"
args10(0).Value = "$A$1:$AF$61"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args10())
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())
Das kannst Du etwas kürzer und übersichtlicher haben.

Code: Alles auswählen

REM Druckbereich für 1 Seite
oDruckSheet = Calc.Sheets(0) ' Blattnummer 1
oZellRange = oDruckSheet.getCellRangeByName("A1:AF61") ' Druckbereich = A1:AF61
oCursor = oDruckSheet.createCursorByRange(oZellRange)
oAdress = oCursor.RangeAddress
Dim aDruckbereich(0)
	aDruckbereich(0) = oAdress
oDruckSheet.setPrintAreas(aDruckbereich()
an irgendeiner Stelle "instabil" ist
Ich würd jetzt hiermit mit JA antworten, da die falsche Variablendeklaration sehr viel ausmachen kann. Deshalb empfehle ich dir hiermit eine Überarbeitung der deklarationen, um zumindest schon mal eine Fehlerquelle zu elemenieren. Und als nächstes würde ich mich an deiner Stelle von dem Dispatcher-Code (aufgezeichneter-code) verabschieden, und das ganze richtig programmieren.

Wie gesagt ich bin Anfänger und das ist nur eine Vermutung.
Und ich bin auch noch keine wirklich große Leuchte wenns ums programmieren geht :( . Ich hoffe aber dennoch das ich etwas weiter helfen konnte :).
Ich empfehle dir außerdem wärmstens die Info-Quellen die unser Moderator Stephan hier: Informationen zur StarBasic-Programmierung zusammengetragen hat.

Viel Erfolg!



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Kann man 2mal If-Then-Else in einem Makro verwenden?

Beitrag von Stephan »

Woran kann das liegen?
Ich habe jetzt nicht den kompletten Code gelesen/analysiert und ebensowenig alles durchdacht was hier im Thread gesagt wurde, auch glaube ich nur das es hier wohl um Calc-Tabellendokumente geht ... Folgendes ist deshalb nur eine grobe Anregung und bitte mit kritischer vorsicht zu betrachten:

-es kann ein 'Terminierungsproblem sein', ich glaube der Parameter für en DRucker heißt dann "wait", mehr dazu steht in der Starbasic-FAQ (leider irgendwo sehr versteckt dort):
http://www.dannenhoefer.de/faqstarbasic/index.html

-es gint in neueren OOo-Versionen, derzeitig das Problem das nur sichtbare Tabellenblätter (das ist nicht Daselbe wie "Seiten" tangiuer das aber) gedruckt werden können, man muß also gggf. vor dem DRuck das jeweilige Tabellenblatt zum aktiven blatt machchen, das geht prinzipiell so:
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig204

Bitte nochmal der Hinweis:
vielleicht lieg ich völlig daneben, Obiges also kritisch betrachten


Gruß
Stephan
junmod
**
Beiträge: 31
Registriert: Di, 07.02.2012 09:06

Re: Kann man 2mal If-Then-Else in einem Makro verwenden?

Beitrag von junmod »

Hallo balu und hallo stephan,

sorry, ich weiß dass ich etwas spät antworte, aber ich bin erst jezt wieder dazu gekommen an meinem Makro zu arbeiten.

@balu: Die Argumente und Variablen habe ich bearbeitet. Danke für den Tipp!

@stephan und balu: Ich habe mich jetzt letztendlich dazu entschlossen die Msgbox weg zu lassen, da ich Sie für unnötig halte. Ich danke Euch aber trotzdem für Eure Hilfe!!!

Gruss
Dirk
Antworten