Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


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


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.