Word Prozedur killen per VBA

Bild

Betrifft: Word Prozedur killen per VBA
von: schmeli
Geschrieben am: 18.09.2015 14:15:28

Hallo Zusammen,
ich habe mich jetzt schon das Internet hoch und runter gegoogled aber ich finde keine wirkliche Lösung. Hoffentlich könnt ihr mir helfen.
Also folgendes Problem:
Ich habe ein VBA Code erstellt, der mir Excel Daten ins Word via Bookmarks einfügt.
Jetzt ist es allerdings so, dass der ein oder andere Benutzer im Excel einfach Zeilen löscht und dann erscheint natürlich der Debugger Modus und meckert, dass er seine Textmarke nicht findet. Problem kann repariert werden, ABER im Hintergrund läuft ein WORRD Prozess. Diesen krieg ich nur über den Task Manager gekillt.
Wenn ich es nicht machen, spinnt Word rum.
Hat mir vielleicht jemand einen Code der im Falle eines Fehlers den Word Prozess auch wieder beendet?
Vielen lieben Dank!
Schmeli

Bild

Betrifft: AW: Word Prozedur killen per VBA
von: EtoPHG
Geschrieben am: 18.09.2015 14:41:10
Hallo Schmeli,
Wir sollen dir also eine Lösung für einen unbekannten Code geben, der einen Fehler nicht abfängt?
Wie stellst du dir das vor?
Gruess Hansueli

Bild

Betrifft: AW: Word Prozedur killen per VBA
von: Nepumuk
Geschrieben am: 18.09.2015 14:56:27
Hallo,
so?

Public Sub Kill_Word()
    Dim objWMI As Object, objProcessList As Object, objProcess As Object
    Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
        ".\root\cimv2")
    Set objProcessList = objWMI.ExecQuery("Select * from Win32_Process " & _
        "Where Name = 'winword.exe'")
    For Each objProcess In objProcessList
        Call objProcess.Terminate(0)
    Next
    Set objProcessList = Nothing
    Set objWMI = Nothing
End Sub

Gruß
Nepumuk

Bild

Betrifft: hoffentlich hat er nicht mehrere offen ;-) (owT)
von: EtoPHG
Geschrieben am: 18.09.2015 14:59:41


Bild

Betrifft: AW: hoffentlich hat er nicht mehrere offen ;-) (owT)
von: schmeli
Geschrieben am: 18.09.2015 15:21:43
Hallo Zusammen,
das ging ja fix. Wahnsinn.
Nach dem mein Code ca. 180 Textmarken verwendet, wollte ich euch das eigentlich ersparen. Aber es scheint, dass es doch hilfreich sein kann, wenn ihr wisst was ich vorhabe. Hier mal die kurz Fassung mit nur einem Bookmark.


Dim appWord As Object
Dim doc As Object 
Dim doctemp As Object           
Dim wks As Worksheet
Dim strFilename     As String
Dim rngRange        As Range
Set appWord = CreateObject("Word.Application") 
Set doctemp = appWord.Documents.Add(ThisWorkbook.Path & "\Templates\OC_Template.doc") 
Set doc = appWord.Documents.Open(ThisWorkbook.Path & "\Templates\OC_Template.doc")  
appWord.Visible = False
'*** Import data from Excel ***
Set wks = ActiveWorkbook.Worksheets("OC") 
With doc
'Simple bookmarks - with out checking in the worksheet
.Bookmarks("Date").Range.Text = wks.Range("X2").Value
'*** Change name of the file ***
Set rngRange = Worksheets("OC").Range("L13") 
strFilename = rngRange.Value & "_OC"  
'*** Save the new file with the new name ****
With doc
    .SaveAs2 ThisWorkbook.Path & "\" & strFilename & ".doc"
    appWord.Documents.Open (ThisWorkbook.Path & "\" & strFilename & ".doc")
End With
'*** Close template without changes ***
With doctemp
     doctemp.Close Savechanges:=False
End With
'*** Clean *****
Set appWord = Nothing
Set doc = Nothing
End Sub
Angenommen mein User hat jetzt die Zeile X2 gelöscht, dann meckert VBA mit dem Debuggen Modus.
Ich hatte hier an so eine einfache Lösung gedacht wie, IF Error then Word.quit oder so etwas.
Mein Code sieht vor, dass die WORD nach dem Ausführen geöffnet bleibt für die Bearbeitung durch den User.
DANKE!
LG


Bild

Betrifft: AW: hoffentlich hat er nicht mehrere offen ;-) (owT)
von: EtoPHG
Geschrieben am: 18.09.2015 18:05:13
Hallo schmeli,
Kopier doch einfach nur, wenn die Zelle nicht leer ist!

Set wks = ActiveWorkbook.Worksheets("OC")
If Len(wks.Range("X2")) > 0 then
    '...kopieren
End if
'*** Save the new file with the new name ****
Gruess Hansueli

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Word Prozedur killen per VBA"