"Wolfgang Badura" schrieb...
> "Hans Alborg" schrieb
>> Was ich tun möchte:
>> Die Log-Datei erst importieren lassen, wenn das Faxproggi fertig ist. So
>> bekomme ich als Dokumentation Adressat, Telefonnummer etc. ins Blatt.
>> Dazu muß Excel wissen daß das Faxprogramm geöffnet war und fertig ist.
> Du weißt wirklich nicht wohin gefaxt wird?
Klar weiß ich das, möchte es aber nicht jedesmal in ein Excelblatt tippen
;-)
> Falls schon:
> Es gibt fxscomex.dll (Micrrosoft Fax Service Extended COM Type Library),
> mit welcher ein Fax vollautomatisch versandt werden kann.
Sehr interessant, weil ich schon mal nach Einzelheiten für Winfax gesucht
hatte. Vielleicht bringt mich das weiter.
In diesem Fall hier nutze ich ein "Win- fremdes" Faxprogramm.
>> Was klappt ist die obige Routine -aber nur dann, wenn das Faxprogramm von
>> Hand gestartet wird!
> Wie startest Du das Fax-Programm?
Excel (VBA) steuert das Faxproggi wie einen Drucker an, wenn ich die Option
"Faxen" in einer Userform anwähle.
> Mittels VBS-Skript (Run-Methode) kann man ein Programm so starten, daß in
> das aufrufende Programm erst zurückgekehrt wird, wenn es beendet wurde.
> Veilleicht kannst Du weitere Informationen preisgeben.
Ich hab inzwischen eine Lösung gefunden, wie ich Jörg schon geschrieben
hatte.
Naja, also der Code sieht etwa so aus (bissl viel):
'------------------------------------------------------------------------
' passiert vorweg:
'- Anzahl u. Parameter der Tabellen zum Faxen einstellen
'-Computername auslesen
'-Faxname des Computers als Printer wählen, Standardprinter merken
' Faxproggi startet jetzt...
ActiveWindow.SelectedSheets.PrintOut Copies:=1, _
ActivePrinter:=Faxmacine, Collate:=True ' --- faxen
Application.ActivePrinter = Normalprinter
' jetzt meine neue Routine,
' ist eine Gosub/ Return- Sache:
Faxprogramm_überwachen:
If Faxexe <> "WFS.exe" Then 'kein Winfax
Dim objWord As Object
Sheets("Aufträge").Unprotect
Set objWord = Nothing
fü:
Set objWord = CreateObject("Word.Application")
Breakzähler = Breakzähler - 1 ' Code fortsetzen wenn kein Faxprg startet
If objWord.Tasks.Exists("Fax-Proggi") = True Or Fxtest <> "" Then '
If Fxtest = "" Then ' Faxprg ist noch nicht gestartet
If Fxtest = "Fax" Then Fxtest = "Fax feritg"
Sheets("Aufträge").Range("A16:A17").Interior.Color =
16776960 ' blau
Sheets("Aufträge").Range("A16:A17").Value = "Faxprogramm
gestartet"
End If
Fxtest = "Fax"
If Not objWord.Tasks.Exists("Fax-Proggi") = True Then
Fxtest = Fxtest & " fertig"
Sheets("Aufträge").Range("A16:A17").Interior.Color = _
65280 ' grünblau
Sheets("Aufträge").Range("A16:A17").Value = _
"faxen beendet"
Else
GoTo fü
End If
Else
Sheets("Aufträge").Range("A16:A17").Interior.Color = 255 ' rot
Sheets("Aufträge").Range("A16:A17").Value = _
"warte auf Faxprogramm! " & Breakzähler
If Breakzähler > 1 Then GoTo fü
End If
Set objWord = Nothing
Fxtest = "": Breakzähler = 0
'objWord.Quit
Sheets("Aufträge").Range("A16:A17").Interior.Color = _
RGB(255, 255, 0) ' gelb
Sheets("BTBP").Range("A16:A17").Value = "Klartext"
Application.ScreenUpdating = False
Call faxlog_laden
Call faxlog_löschen
Else ' ---------------------------- bei Winfax
Fax_Ad = " unbekannt"
End If
Application.ScreenUpdating = True
Return
' -----------------------------------------------
Funktion:
Also auf dem Sheets("Aufträge") mißbrauche ich die Zellen "A16:A17" zur
Anzeige des Faxstatus.
Erst (falls nicht Winfax läuft) startet die Routine mit diesem Breakzähler,
damit es auch weitergeht (bei "0") wenn kein Faxprogramm startet.
Dann wird der Start des Faxprogramms registriert und bis zum Schließen
gewartet Ich muß ja den Adressat dort eingeben und das Faxen durchführen (je
Zahl gefaxter Seiten bis 10min), und dann das Faxfenster wieder schließen.
Das Schließen des Fensters bekommt die Routine dann auch mit und startet
"faxlog laden" und "faxlog löschen". In ersterer Routine wird das Log als
Text (tiiief unten) ins Blatt "Aufträge" geladen, die letzte Zeile gesucht
und Adressat, Faxnummer etc. in die Variable "Fax_Ad" gesteckt.
Die andere Routine stellt die Ordnung im Blatt wieder her
(Spaltenbreiten...) und löscht den Text.
So, das ist hoffentlich hinreichend genau. Tests sind schonmal gut gelaufen
und jetzt muß der frische Code sich noch bewähren :-)
Hans