Feststellen ob Word 2003 im Hintergrund läuft
Hallo,
wie kann ich unter VBA (Word 2003) feststellen , ob die Wordanwendung gerade im Hintergrund ausgeführt wird ?
Grüße
wie kann ich unter VBA (Word 2003) feststellen , ob die Wordanwendung gerade im Hintergrund ausgeführt wird ?
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 80710
Url: https://administrator.de/contentid/80710
Ausgedruckt am: 26.11.2024 um 15:11 Uhr
12 Kommentare
Neuester Kommentar
Für den Fall das Du herausfinden willst ob der Benutzer gerade mit Word arbeitet, respektive Word im Vorgergrund ist schreibe folgendes in ein Modul:
API Funktionen sind nötig da in Word keine WindowsHandles verfügbar gemacht werden. Hoffe das in Word2003 die entsprechende Klasse immer noch "opusapp" heißt. Getestet mit Word2002(XP).
BG, Felix -misterdemeanor-
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function FindWindowByClass Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As Long) As Long
Public Function WordHasFocus() As Boolean
Dim hWnd As Long
hWnd = FindWindowByClass("opusapp", 0&)
If CBool(GetForegroundWindow = hWnd) Then
WordHasFocus = True
Else
WordHasFocus = False
End If
End Function
API Funktionen sind nötig da in Word keine WindowsHandles verfügbar gemacht werden. Hoffe das in Word2003 die entsprechende Klasse immer noch "opusapp" heißt. Getestet mit Word2002(XP).
BG, Felix -misterdemeanor-
Hallo,
Also aus Deinem VBA-Programm wird Word manuell(vom User-->DiAlOG) gestartet?
Dein VBA-Programm oder euer neues Programm? Und welches verarbeitet nun die Serienbriefe? Ich nehme jetzt mal an euer neues Programm. Und definiere doch bitte mal "im Hintergrund" genauer: Also WINWORD.EXE im Task-Manager sichtbar aber nicht in der Task-Leiste?
Sorry das ich so viele Fragen stelle Aber da Du ja etwas mehr erzählt hast glaube ich kaum das Dir der Code aus meinem vorigen Post helfen würde. Folgender (wahrscheinlich) eher.
Das kommt wieder in ein Modul
und so rufst Du die EnumWinProc dann auf
Aber beantworte doch besser noch meine obigen Fragen
BG, Felix -misterdemeanor-
über ein VBA-Programm
von mir, einen 2D Barcode ins Adressfeld
schreiben soll. Das funktionierte auch alles
ganz gut unter VBA solange man Word im Dialog
aufrief.
von mir, einen 2D Barcode ins Adressfeld
schreiben soll. Das funktionierte auch alles
ganz gut unter VBA solange man Word im Dialog
aufrief.
Also aus Deinem VBA-Programm wird Word manuell(vom User-->DiAlOG) gestartet?
Sobald jedoch Serienschreiben im
Hintergrund (also unsichtbar) abgeabeitet
werden, stürzt das Programm mit
Fehlermeldung ab.
Hintergrund (also unsichtbar) abgeabeitet
werden, stürzt das Programm mit
Fehlermeldung ab.
Dein VBA-Programm oder euer neues Programm? Und welches verarbeitet nun die Serienbriefe? Ich nehme jetzt mal an euer neues Programm. Und definiere doch bitte mal "im Hintergrund" genauer: Also WINWORD.EXE im Task-Manager sichtbar aber nicht in der Task-Leiste?
Sorry das ich so viele Fragen stelle Aber da Du ja etwas mehr erzählt hast glaube ich kaum das Dir der Code aus meinem vorigen Post helfen würde. Folgender (wahrscheinlich) eher.
Das kommt wieder in ein Modul
Public Declare Function EnumWindows Lib "user32" _
(ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
(ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Const GWL_STYLE = (-16)
Const WS_VISIBLE = &H10000000
Function EnumWinProc(ByVal lhWnd As Long, ByVal lParam As Long) As Long
Dim RetVal As Long
Dim WinClassBuf As String * 255
Dim WinClass As String
Dim lStyle As Long
RetVal = GetClassName(lhWnd, WinClassBuf, 255)
WinClass = StripNulls(WinClassBuf) ' remove extra Nulls & spaces
If WinClass = "OpusApp" Then
lStyle = GetWindowLong(lhWnd, GWL_STYLE)
If lStyle And WS_VISIBLE Then
'hier dann Code falls laufende Word-Anwendung(en)
Else
'und hier der eher wichtigere Teil falls Wordanwendung(en) UNSICHTBAR laufen
End If
End If
EnumWinProc = True
End Function
Public Function StripNulls(OriginalStr As String) As String
If (InStr(OriginalStr, Chr(0)) > 0) Then
OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
End If
StripNulls = OriginalStr
End Function
und so rufst Du die EnumWinProc dann auf
Dim lRet As Long
Dim lParam As Long
lRet = EnumWindows(AddressOf EnumWinProc, lParam)
Aber beantworte doch besser noch meine obigen Fragen
BG, Felix -misterdemeanor-
Grüß Dich,
lass uns mal zusammenfassen:
Nochmal zu 5. : Die BH Software verlangt sogar eine .dot File. Wenn dem so ist gibt es sicher Richtlinien zu dessen Erstellung wie z.B. die Namen der SeriendruckFelder...richtig?
OK, und in der BH Software kann man sich nun einen Brief respektive einen Serienbrief erzeugen lassen(?).
Der besagte Fehler tritt also auch nur auf wenn Du den zweiten "Vorgang" auslöst?. Bitte einmal genauen Fehlercode posten, falls bekannt.
Ist das soweit richtig? Sorry, ich kann schon ziemlich nerven.
Kannst Du mal den Code posten mit welchem Du das TBarCode OCX Element mit Daten "füllst"? Wie ist die .dot Vorlage benannt? Gibt es eine Richtlinie wie der erzeugte Serienbrief benannt wird? Ehrlich gesagt würde die ganze .dot File / Beispiel-Serienbrief (Mit Müller Mustermann; Ingrid Insider) via eMail an mich noch mehr helfen (siehe in meinem Profil)
BG, Felix -misterdemeanor-
lass uns mal zusammenfassen:
- Du hast eine Word 2003 Vorlage erstellt. (.dot)
- Hierbei handelt es sich um eine Vorlage für Seriendruck.
- Neben den SeriendruckFeldern hast Du auch ein OCX-Steuerelement von TBarCode in der Vorlage.
- In der BeforePrint/Close Ereignisprozedur versiehst Du das TBarCode Steuerelement mit Daten/dem BarCode.
- In Deiner Buchhaltungssoftware kannst Du diese Vorlage auswählen, damit diese verwendet wird.
Nochmal zu 5. : Die BH Software verlangt sogar eine .dot File. Wenn dem so ist gibt es sicher Richtlinien zu dessen Erstellung wie z.B. die Namen der SeriendruckFelder...richtig?
OK, und in der BH Software kann man sich nun einen Brief respektive einen Serienbrief erzeugen lassen(?).
- Für einen einzelnen Datensatz wird Word geöffnet, der User kann damit arbeiten und muss es auch schließen. Der BarCode wird in dem Fall richtig erzeugt(?).
- Für mehrere Datensätze wird Word unsichtbar geöffnet und es werden die Dokumente gedruckt (oder werden die doc´s gespeichert, Auswahlmöglichkeit vorhanden?) Die von Dir erwähnte .XML File dient Word dann als Datenquelle für den Serienbrief, richtig? Werden diese nur temporär erzeugt/dann gelöscht, oder bleibt diese XMLFile bestehen?
Der besagte Fehler tritt also auch nur auf wenn Du den zweiten "Vorgang" auslöst?. Bitte einmal genauen Fehlercode posten, falls bekannt.
Ist das soweit richtig? Sorry, ich kann schon ziemlich nerven.
Kannst Du mal den Code posten mit welchem Du das TBarCode OCX Element mit Daten "füllst"? Wie ist die .dot Vorlage benannt? Gibt es eine Richtlinie wie der erzeugte Serienbrief benannt wird? Ehrlich gesagt würde die ganze .dot File / Beispiel-Serienbrief (Mit Müller Mustermann; Ingrid Insider) via eMail an mich noch mehr helfen (siehe in meinem Profil)
BG, Felix -misterdemeanor-
Um eine Endlosschleife handelt es sich nicht. Es werden alle TopLevel Fenster (Desktop als Parent) durchlaufen (enumeriert). Das können schon gerne 100 und mehr sein.
Für Dein Problem ist es ohnehin so nicht hilfreich. Mir sind auch noch andere Eigenheiten von Word aufgefallen die einige Erweiterungen erfordern würden. Erstmal lassen wir das so auf Eis liegen. Am besten Du beantwortest/bestätigst/korrigierst mal meinen anderen Post, dann sehen wir weiter
BG, Felix -misterdemeanor-
Für Dein Problem ist es ohnehin so nicht hilfreich. Mir sind auch noch andere Eigenheiten von Word aufgefallen die einige Erweiterungen erfordern würden. Erstmal lassen wir das so auf Eis liegen. Am besten Du beantwortest/bestätigst/korrigierst mal meinen anderen Post, dann sehen wir weiter
BG, Felix -misterdemeanor-
Grützi,
schon komisch, je mehr Du erläuterst desto unklarer wird es für mich
Also Dein Buchhaltungsprogramm (poste doch mal bitte wie es heißt und von welchem Hersteller) kommt also mit einer eigenen .dot Vorlage die bereits VBA-Code enthält. Dieser bereits vorhandene VBA-Code übernimmt das erstellen des Dokumentes. Den Inhalt erhält es von einer temporär erzeugten XML-File welche vom BH-Programm erzeugt wird.
(?) Die Word-Dokumente selbst landen in dieser Datenbank? Wow. So langsam würde ich mir das wirklich mal vor Ort ansehen wollen. Aber jetzt umsomehr dies ominöse .dot Vorlage...feb(at)wolfsburg.de
BG, Felix -misterdemeanor-
schon komisch, je mehr Du erläuterst desto unklarer wird es für mich
Also Dein Buchhaltungsprogramm (poste doch mal bitte wie es heißt und von welchem Hersteller) kommt also mit einer eigenen .dot Vorlage die bereits VBA-Code enthält. Dieser bereits vorhandene VBA-Code übernimmt das erstellen des Dokumentes. Den Inhalt erhält es von einer temporär erzeugten XML-File welche vom BH-Programm erzeugt wird.
Die Word-Dokumente werden beim Schließen nicht als .doc gespeichert, sondern landen in der
internen Datenbank der BH.
internen Datenbank der BH.
(?) Die Word-Dokumente selbst landen in dieser Datenbank? Wow. So langsam würde ich mir das wirklich mal vor Ort ansehen wollen. Aber jetzt umsomehr dies ominöse .dot Vorlage...feb(at)wolfsburg.de
BG, Felix -misterdemeanor-