Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

nochmal Word nach Excel | Herbers Excel-Forum


Betrifft: nochmal Word nach Excel von: ing.grohnl
Geschrieben am: 04.02.2010 16:04:30

Hallo Forum,

bei der Übergabe von Excel nach Word hab ich immer wieder Probleme:
Entweder er meldet (in Excel): "der Remote-Server ist nicht verfügbar..."
oder es kommt: "Fehler 4248, dieser Befehl ist nicht verfügbar, weil kein Dokument geöffnet ist."
(das Dokument seh ich aber auf dem Bildschirm)

Beide Fehler kommen in den Zeilen:
ObjWord.ActiveDocument.Close (wdDoNotSaveChanges)
ObjWord.Application.Quit
vor.

Auch wird unter XP nicht immer Word beendet!?
Hier kommt der Code:

Sub Ueberweisung()
    Dim Anrede As String
    Dim Name As String
    Dim Vorname As String
    Dim Strasse As String
    Dim DocNeu As Object
    Dim ObjWord As Object
    Dim Bank As String
    Dim Konto As String
    Dim BLZ As String
    Dim Betrag As String
    Dim eName As String
    Dim eKonto As String
    Dim Verwendung1 As String
    Dim Verwendung2 As String
    Dim Datum As String
    
    Set frm3 = UserForm3
    
    With frm3
         Vorname = .TextBox1.Value
         Konto = .TextBox2.Value
         BLZ = .TextBox3.Value
         Bank = .TextBox9.Value
         Betrag = .TextBox4.Value
         Verwendung1 = .TextBox5.Value
         Verwendung2 = .TextBox6.Value
         eName = .TextBox7.Value
         eKonto = .TextBox8.Value
         Datum = Date
    End With
    
    On Error Resume Next
    Set ObjWord = GetObject("Word.Application")
    If ObjWord Is Nothing Then
       Set ObjWord = CreateObject("Word.Application")
       ObjWord.Visible = True
    End If
    On Error GoTo 0
    If Not ObjWord Is Nothing Then
       Set DocNeu = Word.Application.Documents.Add(Template:= _ 
                                           "C:\Eigene Dateien\Vorlagen\Ueberweisung.dot")
    End If

    With DocNeu
         If Len(LTrim(Vorname)) > 0 Then
           .FormFields("Vorname").Result = Vorname
         End If
         If Len(LTrim(Name)) > 0 Then
           .FormFields("Name").Result = Name
         End If
         If Len(LTrim(Konto)) > 0 Then
           .FormFields("Konto").Result = Konto
         End If
         If Len(LTrim(BLZ)) > 0 Then
           .FormFields("Blz").Result = BLZ
         End If
         If Len(LTrim(Bank)) > 0 Then
           .FormFields("Bank").Result = Bank
         End If
         .FormFields("Betrag").Result = Betrag
         .FormFields("Zweck1").Result = Verwendung1
         .FormFields("Zweck2").Result = Verwendung2
         .FormFields("eName").Result = eName
         .FormFields("eKonto").Result = eKonto
         .FormFields("Datum").Result = Datum
    End With
      
    DocNeu.Application.DisplayAlerts = wdAlertsNone
    DocNeu.Application.Activate
    DocNeu.Application.PrintOut
    ObjWord.ActiveDocument.Close (wdDoNotSaveChanges)
    ObjWord.Application.Quit

    Set DocNeu = Nothing
    Set ObjWord = Nothing
     
End Sub
Dieses Modul wird aus einer Userform aus aufgerufen
Für eine Hilfe bedanke ich mich.
Mit freundlichen Grüßen
Albrecht

  

Betrifft: AW: wievile Word-Instanzen laufen? von: JOWE
Geschrieben am: 04.02.2010 17:35:51

Albrecht,
im Fehlerfall, also wenn das Makro irgendwo aussteigt, bleibt Deine gestartete Word-Instanz (ObjWord) geöffnet, ist aber unsichtbar. Der Taskmanager zeigt Dir unter 'Prozesse' die derzeit laufenden Word-Instanzen auf. Sind mehrere davon aktiv, könnte dies ursächlich für die von Dir beschriebenen Meldungen sein.
In Deinem Code sehe sich so keine Fehler. Du solltest aber unbedingt eine Fehlerroutine einbauen, die die gestartete Word-Instanz im Fehlerfall schließt.
Gruß
Jochen


  

Betrifft: AW: wievile Word-Instanzen laufen? von: ing.grohnl
Geschrieben am: 04.02.2010 18:38:19

Hallo Jochen,
eigentlich möchte ich ja, dass die Word-Instanzen gelöscht werden (auch im Normalfall)
Wie mach das?
Mit freundlichen Grüßen
Albrecht


  

Betrifft: AW: wievile Word-Instanzen laufen? von: Ramses
Geschrieben am: 04.02.2010 20:04:24

Hallo

Das müsste eigentlich auf einen Fehler laufen

Set DocNeu = Word.Application.Documents.Add(Template:= "C:\Eigene Dateien\Vorlagen\Ueberweisung.dot")

Das müsste doch eigentlich objWord.Documents.Add... heissen,... oder ?
Den Rest mit den offenen Word-Instanzen abschiessen würde ich noch überdenken. Wenn dort andere Dokumente offen sind, werden die einfach abgeschossen.
Da ist eine funktionierende Fehlerroutine anstelle von "On Error Resume Next" sicher hilfreicher.

Gruss Rainer


  

Betrifft: AW: wievile Word-Instanzen laufen? von: JOWE
Geschrieben am: 04.02.2010 20:59:58

aber die würde er ja sehen, oder?


  

Betrifft: AW: wievile Word-Instanzen laufen? von: Ramses
Geschrieben am: 04.02.2010 21:11:35

Hallo

"...aber die würde er ja sehen..."

Was willst du mir damit sagen ?
Ich versteh nicht auf was du dich hier beziehst ?

Gruss Rainer


  

Betrifft: AW: was ist richtig: DocNeu.. o. ObjWord..? von: ing.grohnl
Geschrieben am: 04.02.2010 22:01:03

Hallo Rainer, Jowe,
was ist denn nun richtig?

Set DocNeu = Word.Application.Documents.Add(Template:= "C:\Eigene Dateien\Vorlagen\Ueberweisung.dot")

Set DocNeu = ObjWord.Documents.Add...

und wie müßte die Fehlerroutine aussehen?
Übrigens, das ganze hat so schon problemlos funktioniert und mir ist nicht bewusst, etwas geändert zu haben.
Mit freundlichen Grüßen
Albrecht