Makro wird nur teilweise aufgezeichnet

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

Moderator: Moderatoren

Oohh
*
Beiträge: 10
Registriert: Fr, 14.08.2015 16:49

Makro wird nur teilweise aufgezeichnet

Beitrag von Oohh »

Hallo - ich bin hier neu und Makrofrischling.

Ich habe ein Makro aufgezeichnet.
(Im offenen Dokument - Datei - Drucken - ok)

Ergebnis:

Code: Alles auswählen

sub Drucktesteinfach
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:Print", "", 0, Array())


end sub
Fazit: Das Makro druckt nicht.

Die Aktivierung der untersten Zeile (dispatcher....) ist ebenfalls ergebnislos.

Was ist zu tun ?

Danke & Grüße Oohhh
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Makro wird nur teilweise aufgezeichnet

Beitrag von Stephan »

nur um zu drucken reicht eine Zeile:

Code: Alles auswählen

sub Drucktesteinfach
	ThisComponent.Print(Array())
end Sub
Muss irgendwas beim Drucken konfiguriert werden siehe z.B.:
http://www.starbasicfaq.de/WiekannmanDo ... l#Zweig158

Gruß
Stephan
Oohh
*
Beiträge: 10
Registriert: Fr, 14.08.2015 16:49

Re: Makro wird nur teilweise aufgezeichnet

Beitrag von Oohh »

Vielen Dank für die schnelle Hilfe.
Ich habe jetzt stundenlang diverse FAQ´s & OpenOffice org Makros Erklärt durchstöbert
(von verstanden kann man hier deutlich nicht reden :shock: )

Ich beginne:

Code: Alles auswählen

Option Explicit

sub Drucktesteinfach
rem
rem Festlegung Drucker 1
dim args(0) as New com.sun.star.beans.PropertyValue
args(0).Name = "Printer"
args(0).Value = "Xerox weiß "
rem
rem Kontrolle Inhalt Var args
rem
call VarControlPrinter
rem
rem Druckroutine Druck aktuelles Dokument
dim myDoc as object
rem
myDoc=ThisComponent
myDoc.print(args())
rem
sub VarControlPrinter
rem
rem Variablen Definition
dim myDoc as object
dim myprinter as object
rem
rem Kontrolle Inhalt Var
myDoc=thiscomponent
myprinter=mydoc.getPrinter
msgbox myPrinter(0).value
rem
rem
end sub
1.) die Druckvariante über dispatch etc bekomme ich nicht hin, mehrfach versucht, also
2.) für mich funktionierende Druckvariante inkl. call VarControlPrinter subroutine zwecks Auslesen
des aktuell verwendeten Druckernamens.

Frage:
Ziel soll u.a. sein: Aktives Dokument soll über Druckertreiber "Standard" auf weißem Papier und
danach über Druckertreiber "KopieBlau" auf farbigem Papier gedruckt werden (hier andere Papierkassette konfiguriert). Und: bei Kopiedruck soll "Aktenexemplar" auf Kopie in bestimmten Rahmen gedruckt und mit
abgespeichert werden.

So.

Der Druckerwechsel gelingt mir überhaupt nicht.
Anscheinend nimmt das Makro IMMER den Standarddrucker.

Hilfe ?! Bitte :?
Grüße
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Makro wird nur teilweise aufgezeichnet

Beitrag von Stephan »

Der Druckerwechsel gelingt mir überhaupt nicht.
Anscheinend nimmt das Makro IMMER den Standarddrucker.
Da ich Dein Makro mit dem Du das tust nicht kenne (das gepostete Makro führt m.E. keinen Druckerwechsel durch sondern druckt gleich auf einem bestimmten Drucker, kann ich dazu nur sagen das der Druckerwechsel bei mir sowohl per Makroaufzeichnung:

Code: Alles auswählen

sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Printer"
args1(0).Value = "Microsoft XPS Document Writer"

dispatcher.executeDispatch(document, ".uno:Printer", "", 0, args1())


end sub
als auch mittels des entsprechenden (angepassten) Makros unter dem von mir angegebenen Link:

Code: Alles auswählen

Sub DruckerWahl
Dim printprops(0) as New com.sun.star.beans.PropertyValue

printprops(0).Name = "Name"
printprops(0).Value = "Microsoft XPS Document Writer"
ThisComponent.setPrinter(printprops())

End Sub

funktioniert.


Gruß
Stephan
Oohh
*
Beiträge: 10
Registriert: Fr, 14.08.2015 16:49

Re: Makro wird nur teilweise aufgezeichnet

Beitrag von Oohh »

Vorab danke !

Ich versuche gerade Deine Vorschläge hier auszuprobieren.

Irrsinnigerweise erfolgt wahlweise
Basic Laufzeitfehler
Eigenschaft oder Methode nicht gefunden

und zwar für setPrinter, print, CurrentController ....

Das Makro ist derzeit unter "meine Makros" abgespeichert.

Neustart, was auch immer - das Teil will mich schaffen. :shock:

Bin derzeit ratlos. :?
Grüße Oohh
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Makro wird nur teilweise aufgezeichnet

Beitrag von Stephan »

Irrsinnigerweise erfolgt wahlweise
Basic Laufzeitfehler
Eigenschaft oder Methode nicht gefunden

und zwar für setPrinter, print, CurrentController ....
Was soll daran irrsinnig sein?

Hast Du geprüft das Du das richtige ThisComponent-Objekt ansprichst?
Bist Du sicher das das Dokument sichtbar ist währendessen Du das Makro startest und nicht z.B. die Basic-IDE?


Gruß
Stephan
Oohh
*
Beiträge: 10
Registriert: Fr, 14.08.2015 16:49

Re: Makro wird nur teilweise aufgezeichnet

Beitrag von Oohh »

Hüstel 8)
Bist Du sicher das das Dokument sichtbar ist währendessen Du das Makro startest und nicht z.B. die Basic-IDE?
eijeijei. Auhweia.

Jetzt funzt´s wie am Schnürchen:

Code: Alles auswählen

Sub DruckOriginaluKopie
rem ----------------------------------------------------------------------
Dim printprops(0) as New com.sun.star.beans.PropertyValue

printprops(0).Name = "Name"
printprops(0).Value = "Xerox weiß"
ThisComponent.setPrinter(printprops())

dim myDoc as object
myDoc = ThisComponent
myDoc.print(printprops())

Dim printprops2(0) as New com.sun.star.beans.PropertyValue

printprops2(0).Name = "Name"
printprops2(0).Value = "Xerox KopieBlau"
ThisComponent.setPrinter(printprops2())

myDoc = ThisComponent
myDoc.print(printprops2())

End Sub
DANKE !!!!

Den automatisierten Kopiestempel werde ich
erst einmal selbst versuchen.

Sonnige Grüße
Glücklicher Oohh
Antworten