BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!

DANKE >><< DANKE

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗

Aufgezeichnetes Makro klappt nicht

WRITER hat alles, was Sie von einer modernen, voll ausgestatteten Textverarbeitung erwarten.
Mowi56
Beiträge: 21
Registriert: Di 5. Okt 2010, 18:12

Aufgezeichnetes Makro klappt nicht

Beitrag von Mowi56 » Di 13. Sep 2016, 18:15

Hallo,
Bestimmte Dokumente muß ich doppelt ausdrucken.
In der .sdw Datei hatte ich eine Makro-Schaltfläche mit folgendem Makro:
Sub Doppeldruck
'Aufgezeichnetes Makro: Dienstag, 3. September 2002, 08:07
ActiveWindow.Print 1, 1, 2, 0

End Sub

In der .odt- Datei funktioniert das nicht mehr.
Habe deshalb versucht, das Makro aufzuzeichen.
Folgendes ist dabei herausgekommen:
Sub Main

End Sub

sub Doppeldruck
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

Versteht jemand, was das heißen soll bzw wie es richtig ist, damit es funktioniert ?
Vielen Dank für euere Hilfe

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Aufgezeichnetes Makro klappt nicht

Beitrag von craig » Mi 14. Sep 2016, 14:55

Hallo,
der Makrorekorder arbeite nur sehr rudimentär und zeichnet nicht immer alles korrekt auf.

Besser ist es sich mit der Makro-Programmierung zu befassen.
Hier ein Beispiel aus dem Dokument: OOME_3_0_deutsch.pdf
Das Beispiel listet Dir in einer Messagebox aller verfügbaren Drucker Deines Systems auf:

Code: Alles auswählen

REM Makro zur Auflistung der verfügbaren Drucker
REM QUELLE: OOME_3_0_deutsch.pdf
Sub PrintAllPrinterNames()
  Dim oPrintServer ' Der Service PrinterServer.
  Dim oCore        ' Zugriff auf Klassen und andere Objekte über ihre Namen.
  Dim oClass       ' Die Objektklasse XPrinterServer.
  Dim oMethod      ' Methode getPrinterNames von der Klasse XPrinterServer.
  Dim aNames       ' Liste der Druckernamen.
  
  ' Erzeugt das Objekt, das erst mit OOo 3.5 direkt verfügbar sein wird.
  oPrintServer = CreateUnoService("com.sun.star.awt.PrinterServer")
  oCore = CreateUnoService("com.sun.star.reflection.CoreReflection")
  
  ' Die Objektklasse für das Interface XPrinterServer.
  oClass = oCore.forName("com.sun.star.awt.XPrinterServer")
  
  ' Die Methode getPrinterNames für die Klasse XPrinterServer.
  oMethod = oClass.getMethod("getPrinterNames")
  
  ' Aufruf der Methode getPrinterNames für das Objekt PrinterServer.
  aNames = oMethod.invoke(oPrintServer, Array()) 
  MsgBox Join(aNames, Chr$(10))
End Sub
Als nächstes Dein Wunsch-Makro, in dem Du die Anzahl der Ausdrucke einstellen kannst.
Du musst vor der Verwendung noch Deinen Druckernamen eintragen.
Siehe dazu die Kommentare im Code.

Code: Alles auswählen

REM Ausdruck des aktuellen Dokuments
REM Anzahl der Ausdrucke kann über die Variable nPrint eingestellt werden
Sub Ausdruck
Dim pprop(0) as New com.sun.star.beans.PropertyValue
Dim oDoc as object
Dim nPrint as Integer
Dim i as Integer

	' Das aktuelle Dokument referenzieren	
	oDoc = ThisComponent
REM ════════════════════════════════════════════════════════════════════════
REM Zähler für Ausdrucke
REM 0=1 Ausdruck | 1=2 Ausdrucke | 2=3Audrucke, usw.
nPrint = 1
REM ════════════════════════════════════════════════════════════════════════

REM Auf welchem Drucker soll die Ausgabe erfolgen?
pprop(0).Name = "Name"
	pprop(0).Value = "Mein Drucker"		'<--- HIER STATT MEIN DRUCKER, DEN DRUCKERNAMEN EINGEBEN!!!
		oDoc.setPrinter(pprop())

REM Der eigentliche Ausdruck mit der voreingestellten Anzahl der Ausdrucke
	for i = 0 to nPrint
		oDoc.print(pprop())
	next i

End Sub
Gruß
Craig
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Mowi56
Beiträge: 21
Registriert: Di 5. Okt 2010, 18:12

Re: Aufgezeichnetes Makro klappt nicht

Beitrag von Mowi56 » Mi 14. Sep 2016, 17:04

Hallo Craig,
Danke für Deine Hilfe,
Habe die Syntax in des Makros hineinkopiert: Alles Klappt :P
Selbst Makroprogammierung zu lernen lohnt nicht, brauche nur dieses!
Wollte noch die Sicherheitsfrage beim Dateistart umgehen und habe den Ordner /Open Office 4/share/basic als vertrauenswürdig eingegeben.
Aber sie Sicherheitsabfrage kommt immer noch.
Ist das der falsche Ordner?
Nochmals vielen Dank für deine Hilfe!
Gruß Mowi56

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Aufgezeichnetes Makro klappt nicht

Beitrag von craig » Mi 14. Sep 2016, 17:18

Hallo,

Du meinst die Makrosicherheits-Abfrage?
Dann:
Extras → Einstellungen
OpenOffice → Sicherheit, und hier unter Makrosicherheit die Sicherheitsstufe anpassen.

Gruß

Craig
Gruß

Craig

Nie die Sicherungskopie vergessen!

═══════════════════════════════════════
WIN 10 Pro 64-Bit • AOO 4.1.8 • LO 7.4.5.1 (x64)

Mowi56
Beiträge: 21
Registriert: Di 5. Okt 2010, 18:12

Re: Aufgezeichnetes Makro klappt nicht

Beitrag von Mowi56 » Fr 9. Sep 2022, 14:38

Hallo Craig,
Bist Du noch im Forum aktiv?
Inzwischen habe ich wieder das gleiche Problem wie damals!
Ein anderer Computer mit Win 10 und Office 4.1.12
Auf das Makro:
REM ***** BASIC *****

Sub Main

End Sub


Sub Ausdruck
Dim pprop(0) as New com.sun.star.beans.PropertyValue
Dim oDoc as object
Dim nPrint as Integer
Dim i as Integer

' Das aktuelle Dokument referenzieren
oDoc = ThisComponent
REM ════════════════════════════════════════════════════════════════════════
REM Zähler für Ausdrucke
REM 0=1 Ausdruck | 1=2 Ausdrucke | 2=3Audrucke, usw.
nPrint = 1
REM ════════════════════════════════════════════════════════════════════════

REM Auf welchem Drucker soll die Ausgabe erfolgen?
pprop(0).Name = HP
pprop(0).Value = Officejet4500 '<--- HIER STATT MEIN DRUCKER, DEN DRUCKERNAMEN EINGEBEN!!!
oDoc.setPrinter(pprop())

REM Der eigentliche Ausdruck mit der voreingestellten Anzahl der Ausdrucke
for i = 0 to nPrint
oDoc.print(pprop())
next i

End Sub
reagiert Oo mit fer Fehlermeldung:
officefehlermeldung.PNG
Kannst Du mir sagen, wo der Wurm drin ist?
Gruß Mowi56

mikele
Beiträge: 774
Registriert: Sa 23. Jul 2011, 22:09

Re: Aufgezeichnetes Makro klappt nicht

Beitrag von mikele » Sa 10. Sep 2022, 12:05

Hallo,
die zwei Zeilen hast du falsch angepasst:

Code: Alles auswählen

pprop(0).Name = HP
pprop(0).Value = Officejet4500 '<--- HIER STATT MEIN DRUCKER, DEN DRUCKERNAMEN EINGEBEN!!!
Die erste Zeile muss so lauten:

Code: Alles auswählen

pprop(0).Name = "Name"
Die zweite Zeile (wahrscheinlich) so:

Code: Alles auswählen

pprop(0).Value = "HP Officejet4500"
Innerhalb der Anführungsstriche muss die Bezeichnung des Druckers (so wie sie im Druckdialog erscheint) stehen.
Gruß,
mikele

Mowi56
Beiträge: 21
Registriert: Di 5. Okt 2010, 18:12

Re: Aufgezeichnetes Makro klappt nicht

Beitrag von Mowi56 » Mo 12. Sep 2022, 18:02

Hallo Mikele,
Danke für Deine Hilfe.
Ich weiß nur nicht, welchen Namen ich in die erste Zeile eingeben soll. (Datei, Makronamen oder was)
In der zweiten Zeile habe ich die genaue Druckerbezeichnung ohne Leerzeichen eingefügt.
Mit Leerzeichen kam Meldung Syntaxfehler.
Merkwürdig ist, daß bei Auswahl des Makros im Selector und "Ausführen" das ganze klappt
Weshalb kommt dann beim anklicken des Feldbefehls die Fehlermeldung ?
Gruß Mowo56

mikele
Beiträge: 774
Registriert: Sa 23. Jul 2011, 22:09

Re: Aufgezeichnetes Makro klappt nicht

Beitrag von mikele » Mo 12. Sep 2022, 18:35

Hallo,
Ich weiß nur nicht, welchen Namen ich in die erste Zeile eingeben soll.
Gar keinen, du schreibst die Zeile so wie sie ist (auch die Anführungszeichen sind wichtig!)
Mit Leerzeichen kam Meldung Syntaxfehler.
Hast du die Anführungszeichen mitgesetzt?
Merkwürdig ist, daß bei Auswahl des Makros im Selector und "Ausführen" das ganze klappt
Weshalb kommt dann beim anklicken des Feldbefehls die Fehlermeldung ?
Das verstehe ich nicht. Welcher Feldbefehl?
Gruß,
mikele

Mowi56
Beiträge: 21
Registriert: Di 5. Okt 2010, 18:12

Re: Aufgezeichnetes Makro klappt nicht

Beitrag von Mowi56 » Mo 12. Sep 2022, 19:04

Hallo Mikele,
Vergaß ich zu erwähnen; Das Makro wird durch einen Feldbefehl im Dokument gestartet.
Das Makro habe ich jetzt so verändert:
REM ***** BASIC *****

Sub Ausdruck
Dim pprop(0) as New com.sun.star.beans.PropertyValue
Dim oDoc as object
Dim nPrint as Integer
Dim i as Integer

' Das aktuelle Dokument referenzieren
oDoc = ThisComponent
REM ════════════════════════════════════════════════════════════════════════
REM Zähler für Ausdrucke
REM 0=1 Ausdruck | 1=2 Ausdrucke | 2=3Audrucke, usw.
nPrint = 1
REM ════════════════════════════════════════════════════════════════════════

REM Auf welchem Drucker soll die Ausgabe erfolgen?
pprop(0).Name = "Name"
pprop(0).Value = "HPOfficejet4500G510g-m" '<--- HIER STATT MEIN DRUCKER, DEN DRUCKERNAMEN EINGEBEN!!!
oDoc.setPrinter(pprop())

REM Der eigentliche Ausdruck mit der voreingestellten Anzahl der Ausdrucke
for i = 0 to nPrint
oDoc.print(pprop())
next i

End Sub
Die Fehlermeldung bleibt.
Was ist jetzt falsch?
Gruß Mowi56

mikele
Beiträge: 774
Registriert: Sa 23. Jul 2011, 22:09

Re: Aufgezeichnetes Makro klappt nicht

Beitrag von mikele » Mo 12. Sep 2022, 21:36

Hallo,
Die Fehlermeldung bleibt.
Wie lautet die Fehlermeldung vollständig? An welcher Stelle des Makros taucht sie auf?
Das mit dem Feldbefehl verstehe ich nach wie vor nicht. Kannst du eine solche Datei hier hochladen?
Gruß,
mikele

Antworten