Makro hängt nach Erstellung von Serienbrief

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

Moderator: Moderatoren

rkwiatek
Beiträge: 4
Registriert: Do, 16.03.2006 20:33
Wohnort: Berlin

Makro hängt nach Erstellung von Serienbrief

Beitrag von rkwiatek »

Problem:
Aus einer Vorlage soll ein Serienbrief erstellt werden und auf verschiedenen Druckern ausgegeben werden. Dazu habe ich ein Makro geschrieben und es in einem Dokument gespeichert. Das Makro liest die benötigten weiteren Parameter aus einer Datei aus und wurde dem Ereignis "Dokument öffnen" zugewiesen. Das klappt im Debug Modus einwandfrei.
Nun will ich das Dokument aus der Kommandozeile starten. OO startet, das Makro läuft auch los, generiert den Serienbrief in eine Datei und hängt dann. Klicke ich nun in eines der Menüs läuft das Makro wie geplant weiter - soll aber ohne Benutzereingriffe laufen.
Wer kann mir einen Tipp geben - was mach ich falsch ???
Sub AutoOpen()
Dim oDocument As Object
oDocument = StarDesktop.currentComponent
Dim InpHnd As Integer
Dim WrkDoc As String ' Arbeitsdokument
Dim MrgSrc As String ' Serienbrief - Datenquelle
Dim WrkMac As String ' abzuarbeitendes Makro
InpHnd = FreeFile
Open Parameterfile For Input As InpHnd
Line Input #InpHnd, WrkDoc
Line Input #InpHnd, MrgSrc
Line Input #InpHnd, WrkMac
Close #InpHnd
WrkMac = UCase(WrkMac)
If WrkMac = "ONLYPRINT" or WrkMac = "ONLYTIFF" then
Dim KeyName As String
Dim ValName As String
GlobalScope.BasicLibraries.LoadLibrary("ImportWizard")
KeyName = "Software\Microsoft\Windows NT\CurrentVersion\Windows"
ValName = "DEVICE"
Drucker = QueryValue(HKEY_CURRENT_USER, KeyName, ValName)
Drucker = Mid(Drucker, 1, Instr(1, Drucker, ",") -1)
End If
If WrkMac = "ONLYPRINT" or WrkMac = "ONLYTIFF" then
Dim MyMerge
MyMerge = createunoservice("com.sun.star.text.MailMerge")
MyMerge.DataSourceName = "MySource"
MyMerge.DocumentURL = ConvertToURL(WrkDoc)
MyMerge.CommandType = 0
MyMerge.Command = "Tab"
MyMerge.OutputType = 2
MyMerge.OutputUrl = ConvertToUrl("C:\TEMP")
MyMerge.Filenameprefix = "Serienbrief"
MyMerge.execute (array())
End If
' Hängt hier - Eine MsgBox hilft hier weiter - löst aber mein Problem nicht
Select Case WrkMac
Case "ONLYPRINT"
shell (SOFFICE, MINIBACK, "-pt " + Drucker + " " + Datei)
Case "ONLYTIFF"
shell (SOFFICE, MINIBACK, "-pt " + TiffDrucker + " " + Datei)
Case Else
MsgBox "Das angeforderte Makro " + WrkMac + " ist nicht definiert !"
End Select
Back1:
Wait (100)
On Error Goto Back1
oDocument.Close(true)
End Sub
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Wer kann mir einen Tipp geben - was mach ich falsch ???


Ich kann bei kurzer Betrachtung keinen Fehler erkennen, die MsgBox deutet aber darauf hin das es um ein Fokus-Problem gehen könnte.
Du solltest also mal schauen welches Fenster den Fokus hat, nachdem Du OK in der MsgBox gklickt hast, und notfalls diesem Fenster den Fokus innerhalb des Codes zwangweise zuordnen, in etwa:

Code: Alles auswählen

<Dokumentobjekt>.currentcontroller.frame.containerwindow.toFront 


Gruß
Stephan
rkwiatek
Beiträge: 4
Registriert: Do, 16.03.2006 20:33
Wohnort: Berlin

Beitrag von rkwiatek »

Zuerst einmal vielen Dank für Deinen Tip. Das hilft mir aber nicht weiter, weil sich am Verhalten des Makros damit absolut nichts ändert. Anstelle der Msgbox hab ich demzufolge
oDocument.currentcontroller.frame.containerwindow.toFront
benutzt. Mein Dokument stand auch vorher schon "toFront". Reinklicken in das Fenster hilft auch nicht. Ich muss in eines der Menüs (egal welches) klicken, dann rennt mein Makro weiter.

Mein eigentliches Problem ist, das ggf. Ausgaben auf mehreren Druckern erfolgen müssen und diese zugewiesen werden müssen. Mit
SetPrinter
und später
MyMerge.OutputType = 0 ' Drucker
komme ich aber auch nicht zum gewünschten Ergebnis (druckt permanent auf dem Standardrucker und ignoriert meine Zuweisung auf andere Drucker). Deshalb bin ich ausgewichen auf
MyMerge.OutputType = 1 ' Datei
und auf den Druck über "shell SOFFICE -pt <%2> <%1>" und das klappt auch viel besser, ist vielleicht aber doch ein Sackgasse. Meine Erfahrungen sind vielleicht doch zu sehr durch "winzigweich" geprägt. Und da komm ich momentan noch nicht wirklich drüber hinaus.
rkwiatek
Beiträge: 4
Registriert: Do, 16.03.2006 20:33
Wohnort: Berlin

Beitrag von rkwiatek »

Inzwischen habe ich das Makro mit StarOffice 8 getestet - und es funktioniert.
Antworten