Hallo und guten Tag an alle Experten!
Zur Zeit nutze ich OxygenOffice 3.0.1 unter WIN 8 Prof. und kann hier
aus OxygenOffice mittels folgendem Makro sowohl Einzelfaxe als auch
Serienfaxe mittels Fritz.Box und FritzfaxMakro versenden.
( Ursprüngliche Beschreibung
von StefanW, November 2007
(Diskussion dazu auf der Mailingliste users@de.openoffice.org)
Faxen vom PC geschieht in der Regel über eine Software, die das
Versenden von Dokumenten über einen virtuellen Drucker ermöglicht.
Schickt man seinen Brief an diesen „Drucker“ so öffnet sich ein
Dialogfeld der Fax-Software, in dem die Faxnummer des Empfängers
einzutragen ist. Erst dann wird der Faxversand gestartet.
Oft hat man in seinem Brief in der Textverarbeitung bereits die
Faxnummer des Empfängers eingetragen. Wenn es gelingt, dass diese im
Brief enthaltene Nummer automatisch an den Fax-Drucker übergeben wird,
wäre die erneute manuelle Eingabe und das Erscheinen des Dialogfelds
nicht mehr erforderlich.
Für das Versenden von Serienfaxen ist die automatische Übergabe der
Faxnummer noch viel wichtiger. Die Faxnummer ist ja regelmäßig als Feld
in der dem Serienbrief zugrunde liegenden Datenbank vorhanden. Wer will
diese Nummern schon alle einzeln beim Versenden eintippen?
Für Windows-PCs ist die Software Fritz!Fax, die vom Hersteller AVM mit
seinen ISDN-Produkten vertrieben wird sehr populär. Leider ist diese
Software nicht wie andere intelligente Fax-Systeme (z. B. Tobit) in der
Lage, auf eine schlicht im Dokumententext enthaltene Faxnummer
zuzugreifen und so eine erneute manuelle Eingabe zu vermeiden.
Statt dessen bietet Fritz!Fax eine Automatisierung über die Windows
Registry an. Dabei ist Fritz!Fax für den Betrieb mit Microsoft Basic
optimiert. In VB und VBA kann man mit nur einem Programmstatement eine
Information in die Registry schreiben, allerdings nur genau in diesem Pfad:
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\
Wenn Fritz!Fax hier entsprechende Einträge findet, dann übernimmt es die
Faxnummer für den Druckauftrag an den Faxdrucker ohne das Dialogfeld für
die Nummerneingabe zu öffnen.
Wollen Programmierer anderer Sprachen die Automatisierung von Fritz!Fax
nutzen, müssen sie ebenfalls die erforderliche Info an die eigentlich
für VB und VBA vorgesehene Stelle in der Registry schreiben. Das ist
grundsätzlich kein Problem, in der Praxis jedoch wesentlich aufwändiger,
weil man meist auf Windows-API-Funktionen zurückgreifen muss.
Das Makro OOoFritzFax bietet eine Lösung mit OpenOffice.org Basic an.
Die Installation geschieht durch die folgenden Schritte:
Den Quelltext des Makros finden Sie am Ende dieser Seite
Starten Sie OpenOffice.org Writer und wählen Sie Extras | Makros |
Makros verwalten | OpenOffice.org Basic ...
Klicken Sie auf Verwalten...
Markieren Sie "Meine Makros" und klicken Sie auf Neu...
Geben Sie einen beliebigen Namen für das neue Modul ein. OK.
Klicken Sie auf Bearbeiten... Das neue Modul wird im Basic-Editor
geöffnet.
Ersetzen Sie mit Kopieren und Einfügen den gesamten Text im neuen
Modul durch den unten abgedruckten Makrotext
Schließen Sie den Basic-Editor.
Nun müssen die zwei im Makro enthaltenen Prozeduren an die
entsprechenden Ereignisse der Anwendung gebunden werden. Das geht so:
Wählen Sie Extras | Anpassen | Ereignisse
Stellen Sie im Auswahlfeld „Speichern in“ OpenOffice.org ein.
Markieren Sie das Ereignis „Dokument drucken“ und klicken Sie auf
die Schaltfläche „Makro“
Suchen Sie in der Bibliotheksauswahl das von Ihnen zuvor angelegte
Modul und markieren Sie in der Liste „Name des Makros“ den Eintrag
„FritzFax“. Klicken Sie auf OK.
Markieren Sie das Ereignis „Dokument aktivieren“ und klicken Sie
auf die Schaltfläche „Makro“
Suchen Sie in der Bibliotheksauswahl das von Ihnen zuvor angelegte
Modul und markieren Sie in der Liste „Name des Makros“ den Eintrag
„FritzFaxReset“. Klicken Sie auf OK.
Die Fax-Funktionalität ist nun eingerichtet und wir können unser erstes
Testfax erstellen.
Zunächst versenden wir einen einzelnen Brief, der im Anschriftenfeld
oder sonst wo im Text die Faxnummer enthält. Auf die Faxnummer müssen
Sie eine Textmarke mit dem Namen „FaxNr“ setzen. Möglicherweise wollen
Sie sich eine Dokumentvorlage für Faxe anlegen, in der diese Textmarke
enthalten ist. Drucken Sie dieses Dokument nun auf den
Fritz!Fax-Drucker. Der Faxversand müsste nun sofort unter Verwendung der
in der Textmarke enthaltenen Nummer beginnen.
Wenn Sie die Textmarke mit der Faxnummer leer lassen oder wenn diese im
Dokument gar nicht enthalten ist, verhält sich Fritz!Fax konventionell
und verlangt die manuelle Eingabe der Empfängernummer. Sie können ein
für das automatische Faxen eingerichtetes Dokument auch jederzeit an
einen echten Drucker senden. Das Makro OOoFritzFax tut dann zwar auch
seinen Dienst, jedoch ohne Wirkung, aber auch ohne Schaden.
Um nun ein Serienfax zu versenden, erstellen Sie wie gewohnt einen
Serienbrief mit OpenOffice.org nehmen Sie in den Brief ein
Seriendruckfeld auf, das die Faxnummer des Empfängers enthält. Setzen
Sie auf dieses Feld eine Textmarke mit dem Namen „FaxNr“. Wenn Sie die
Faxnummer zwar automatisch übergeben wollen, aber nicht auf den
versendeten Briefen sehen wollen, können Sie diese mit der
Zeicheneigenschaft „ausgeblendet“ aus den Formateinstellungen von
OpenOffice.org unsichtbar machen.
Wenn Sie nun Ihren Seriendruck auf den Fritz!Fax-Drucker ausgeben,
werden in FritzFax entsprechende Sendeaufträge erzeugt und alle Briefe
der Reihe nach an die in Ihrer Adressdatei hinterlegten Faxnummern
versendet.
Das Makro besteht derzeit in der Version 0.3, was ausdrückt, dass es
eine frühe Versuchsversion ohne große Praxiserfahrung ist. Feedback ist
immer willkommen!
Viel Spaß!
REM ***** BASIC *****
'*** Control Fritz!Fax by OpenOffice.org
'***
'*** Suppress the Fritz dialogue for entering the recipients fax number.
'*** Deliver the fax number through the Windows Registry instead.
'***
'*** Use this macro for single fax letters as well as mail merge fax.
'***
'*** The text document is supposed to contain a bookmark named "FaxNr".
'*** The text in this bookmark is considered as the recipients number.
'***
'*** Author: Stefan Weigel <sweigel AT openoffice DOT org>
'*** © Stefan Weigel
'*** Version 0.3 / 2007-NOV-07
option explicit
Global iMergeCounter as integer
'--- Declaration of Windows API functions for writing to the Windows
Registry
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _
(ByVal hKey As Long, _
ByVal lpSubKey As String, _
phkResult As Long) As Long
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" _
(ByVal hKey As Long,_
ByVal lpSubKey As String) As Long
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
(ByVal hKey As Long, _
ByVal lpValueName As String, _
ByVal Reserved As Long, _
ByVal dwType As Long, _
lpData As Any, _
ByVal cbData As Long) As Long
Declare Function RegCloseKeyA Lib "advapi32.dll" Alias "RegCloseKey" _
(ByVal hKey As Long) As Long
'--- Here we go
Sub FritzFax()
'This procedure is to be called by the 'Print Document' event
Dim FaxNr as string
Dim DocName as string
Dim hCurKey As Long
Dim lRegResult As Long
'Is this a text document?
If not
thisComponent.SupportsService("com.sun.star.text.TextDocument") Then
exit sub
'In case of mail merge count printjobs
iMergeCounter = iMergeCounter + 1
'Get FaxNr
on error resume next
'FaxNr in bookmark 'FaxNr'
FaxNr = thisComponent.Bookmarks.getByName("FaxNr").getAnchor.getString
if iMergeCounter > 1 then
'In case there are numbered bookmarks 'FaxNrX'
FaxNr =
thisComponent.Bookmarks.getByName("FaxNr"&iMergeCounter-1).getAnchor.getString
endif
on error goto 0
'Get title from window and create name of print job
DocName = thisComponent.CurrentController.Frame.Title
do until right(DocName,3)=" - "
DocName = left(DocName,len(DocName)-1)
loop
DocName = left(DocName,len(DocName)-3)
'In case of mail merge add number to name of print job
if iMergeCounter > 1 then DocName = DocName & " - " & iMergeCounter
'Write registry entry for Fritz
lRegResult = RegCreateKey(&H80000001, "Software\VB and VBA Program
Settings\FRITZ!fax\Print\", hCurKey)
lRegResult = RegSetValueEx(hCurKey, DocName, 0, 1, FaxNr, Len(FaxNr))
lRegResult = RegCloseKeyA(hCurKey)
end sub
sub FritzFaxReset()
'This procedure is to be called by the 'Activate Document' event
'It Resets the print job counter (in case of mail merge)
'and cleans up the registry.
Dim lRegResult As Long
lRegResult =RegDeleteKey(&H80000001, "Software\VB and VBA Program
Settings\FRITZ!fax\Print\")
iMergeCounter = 0
end sub)
Nun möchte ich gerne auf LibreOffice umsteigen.
Allerdings habe ich probeweise schon LO 3.6.3.unter WIN 8 Prof. getestet.
Aber das funktioniert nicht so wie unter dem alten OxygenOffice.
Leider kenne ich mich nicht aus mit Makroprogrammierungen und Basic und
dergleichen.
Bin nur Anwender.
Herzlichen Dank für Eure Geduld und Nachsicht.
Liebe Grüße aus dem Markgräflerland
Karl Kleeb
--
Informationen zum Abmelden: E-Mail an users+help@de.libreoffice.org
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Context
- [de-users] LibreOffice 3.6.4.3 und FritzFax unter WIN 8 · Karl Kleeb
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.