Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1640to1644
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Laufzeitfehler 462 bei VBA Zugriff auf Word von Ex

Laufzeitfehler 462 bei VBA Zugriff auf Word von Ex
02.09.2018 23:56:32
Ex
Hallo zusammen,
ich arbeite mit Office 2016 und möchte von Excel aus einen Serienbrief in Word generieren. Das klappt auch alles wunderbar. Wenn es dann aber daran geht, den erstellten Serienbrief als PDF-Dokument zu speichern, dann kann ich diese Funktion genau ein einziges Mal aufrufen. Führe ich die Funktion ein weiteres Mal durch, dann erhalte ich jedes Mal den Laufzeitfehler 462.
Das Problem ist folgender VBA-Code:
ActiveDocument.ExportAsFixedFormat Outputfilename:=PDFFilename, ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=True, OptimizeFor:=wdExportOptimizeForPrint, Range:= _
wdExportAllDocument, Item:=wdExportDocumentContent, _
IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _
wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False

Was bitte muss ich verändern, damit der Laufzeitfehler nicht mehr auftritt? Ich stehe vor einem Rätsel, habe schon etwas länger rumgebastelt. Daher bin ich für Hilfe echt dankbar.
Leider hilft mir der Support von Microsoft nicht so richtig weiter. Dort heißt es zum Laufzeitfehler 462:
Zum Automatisieren von Microsoft Excel legen Sie eine Objektvariable fest, die normalerweise auf die Excel-Anwendung oder das Excel-Arbeitsmappenobjekt verweist. Dann können weitere Objektvariablen festgelegt werden, um auf eine Arbeitsmappe, einen Bereich oder andere Objekte im Microsoft Excel-Objektmodell zu verweisen. Wenn Sie Code schreiben, der ein Excel-Objekt, eine Excel-Methode oder -Eigenschaft verwendet, sollte dem Aufruf immer eine entsprechende Objektvariable vorhergehen. Anderenfalls erstellt Visual Basic einen eigenen Verweis auf Excel. Dieser Verweis könnte zu Problemen führen, wenn Sie versuchen, den Automatisierungscode mehrere Male auszuführen. Beachten Sie, dass selbst wenn die Codezeile mit der Objektvariablen beginnt, ein Aufruf eines Excel-Objekts, einer Excel-Methode oder -Eigenschaft in der Mitte der Codezeile erfolgen kann, der keine Objektvariable vorangestellt ist.
Hier noch der vollständige VBA-Code meiner Routine:
Sub Serienbrief_Zertifikat()
Worksheets("Serie").Activate
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Serie")
'Prüfen ob Teilnehmer und VAG eingetragen sind
Dim iZeileInhalt, iZeile As Integer
iZeileInhalt = 0
For iZeile = 2 To 20
If ws.Cells(iZeile, 1)  "" And ws.Cells(iZeile, 1)  "0" Then
iZeileInhalt = 1
Exit For
End If
Next
If iZeileInhalt = 0 Then
MsgBox "Keine Teilnehmer vorhanden." & vbCr & vbCr & "Daten eintragen oder anderes Seminar  _
auswählen.", vbCritical, "Fehlende Daten"
Exit Sub
End If
If ws.Cells(21, 2) = "" Or ws.Cells(21, 2) = 0 Then
MsgBox "VAG ist bei dem ausgewählten Seminar nicht eingetragen." & vbCr & vbCr & "Ohne VAG  _
keine weitere Verarbeitung möglich!", vbCritical, "Fehlerhafte Eingabe"
Exit Sub
End If
Dim VAG_Jahr, VAG_Nr, DatT, DatM, DatJlang, DatJkurz As String
With ws
VAG_Jahr = Left(.Cells(21, 2), 2)
VAG_Nr = Mid(.Cells(21, 2), InStr(1, .Cells(21, 2), "/") + 1)
DatT = Left(.Cells(2, 40), 2)
DatM = Mid(.Cells(2, 40), 4, 2)
DatJlang = Right(.Cells(2, 40), 4)
DatJkurz = Right(.Cells(2, 40), 2)
End With
'Verzeichnisse und Vorlagen auslesen und überprüfen
Dim Gruppenlaufwerk, sFilename, PDFVerzeichnis, PDFFilename As String
Gruppenlaufwerk = Names("GruppenlaufwerkVerzeichnis").RefersToRange.Value
If Gruppenlaufwerk = "" Then
MsgBox "Es wurde kein Gruppenlaufwerk eingegeben.", vbCritical, "Fehlende Daten  _
Gruppenlaufwerk"
Exit Sub
End If
If Right(Gruppenlaufwerk, 1)  "\" Then Gruppenlaufwerk = Gruppenlaufwerk & "\"
If Dir(Gruppenlaufwerk) = "" Then
MsgBox "Das Verzeichnis: " & vbCr & vbCr & Gruppenlaufwerk & vbCr & vbCr & "existiert nicht. _
", vbCritical, "Fehlerhaftes Verzeichnis"
Exit Sub
End If
sFilename = Gruppenlaufwerk & "Vorlagen\" & Names("VorlageZertifikat").RefersToRange.Value
If sFilename = "" Then
MsgBox "Es wurde keine Vorlagendatei für das Zertifikat eingegeben.", vbCritical, "Fehlende  _
Daten Vorlagendatei"
Exit Sub
End If
If Dir(sFilename) = "" Then
MsgBox "Die Vorlage für das Zertifikat existiert nicht" & vbCr & vbCr & "Dateiname:" &  _
sFilename, vbCritical, "Fehler Vorlage"
Exit Sub
End If
PDFVerzeichnis = DatJkurz & DatM & DatT & "_" & VAG_Jahr & "_" & VAG_Nr
PDFFilename = Gruppenlaufwerk & DatJlang & "\" & PDFVerzeichnis & "\" & DatJkurz & DatM & DatT & _
"_Zertifikat_Serie.pdf"
If Dir(Gruppenlaufwerk & DatJlang, vbDirectory) = "" Then
MkDir (Gruppenlaufwerk & DatJlang)
End If
If Dir(Gruppenlaufwerk & DatJlang & "\" & PDFVerzeichnis, vbDirectory) = "" Then
MkDir (Gruppenlaufwerk & DatJlang & "\" & PDFVerzeichnis)
End If
'Word-Dokument öffnen
Dim wordApp As Object
Set wordApp = CreateObject("Word.Application")
wordApp.Visible = True
Dim doc As Word.Document
Set doc = CreateObject("Word.Document")
Set doc = wordApp.Documents.Open(sFilename, ConfirmConversions:=False, ReadOnly:=False,  _
AddToRecentFiles:=False)
Dim wb As Workbook
Set wb = ThisWorkbook
Dim sExcel_Filename As String
sExcel_Filename = ThisWorkbook.FullName
'Excel Datenquelle
doc.MailMerge.OpenDataSource Name:=sExcel_Filename, SQLStatement:="SELECT * FROM `Serie$` where  _
[31]  '' "
'Serienbrief erzeugen
If Err.Number = 9 Then
Err.Clear
doc.MailMerge.Execute
ElseIf Err.Number  0 Then
MsgBox "Fehler Word beim Daten holen von Excel." & vbCr & Err.Description, vbCritical, " _
Fehler"
Else
doc.MailMerge.Execute
End If
ActiveDocument.ExportAsFixedFormat Outputfilename:=PDFFilename, ExportFormat:=wdExportFormatPDF, _
_
OpenAfterExport:=True, OptimizeFor:=wdExportOptimizeForPrint, _
Range:= _
wdExportAllDocument, Item:=wdExportDocumentContent, _
IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _
wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
'Word-Dokumente schließen und Word beenden
ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
doc.Close False
Word.Application.Quit
Set ws = Nothing
Set wb = Nothing
Set doc = Nothing
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 462 bei VBA Zugriff auf Word von Ex
03.09.2018 01:27:04
Ex
Hallo Sonnenklee,
wenn Du Dir die ganze Fehlermeldung durchliest, dann steht da noch so was:
"Der Remote-Server-Computer existiert nicht oder ist nicht verfügbar."
Du solltest Dir angewöhnen, ALLE erzeugten Objektvariablen auch wieder zu schließen und auf 'Nothing' zu setzen.
Dieser Befehl: Word.Application.Quit
kann eigentlich nur funktionieren, wenn Du im Vba-Editor denn Verweis auf das Word-Objekt gesetzt hast und damit 'Early-Binding' verwenden würdest - Deine Zusammenarbeit von Excel/Word beruht aber auf 'Late Binding' [durch Set wordApp = CreateObject("Word.Application")].
Die Word-Variable, mit der Du Word öffnest ist aber diese: wordApp - deshalb: wordApp.Quit
Ja, ich höre schon wieder die Weltverbesserer mit der Meinung: lokal definierte Variablen werden nach dem Beenden der Sub/Funktion sowieso automatisch ins Jenseits geschickt. Der berühmteste dt.-sprachige Vertreter davon ist wohl Lorenz Hölscher, der in seinen Video2Brain-Videos darauf immer wieder hinweist und bei Vba sogar schon vom 'garbage collector' gesprochen hat. In einem seiner letzten Access-Videos hat er sogar den Recordset nicht geschlossen und auf Nothing gesetzt und es extra noch wortreich untermalt.
Überprüfe also noch mal alle erzeugten Objectvariablen, informiere Dich, ob die geschlossen werden müssen (.Close) und setze sie zum Schluß auf 'Nothing'.
Auch das erzeugen nicht genutzer Objektvariablen ist der Übersichtlichkeit nicht förderlich, z.B.
Dim wb As Workbook
Set wb = ThisWorkbook - es gibt nirgens einen Befehl, der mit wb.fortgesetzt wird
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Laufzeitfehler 462 bei VBA Zugriff auf Word von Ex
03.09.2018 03:30:53
Ex
Vielen Dank für die Rückmeldung.
Die Objektvariabel wb habe ich entfernt, ebenso Word.Application.Quit durch wordApp.Quit ersetzt. Und wordApp habe ich zum Ende hin auf Nothing gesetzt. Leider ändert das aber nichts an meinem Problem. Es ist aber aufgeräumter und stimmiger.
Wenn ich nicht total übermüdet bin, dann habe ich 2 Objektvariablen: wordApp und doc. Doc schließe ich bereits in meinem Code und wordApp lässt sich nicht schließen.
"Der Remote-Server-Computer existiert nicht oder ist nicht verfügbar." sagt mir nicht viel, da dieser definitiv zur Verfügung steht.
Crosspost
03.09.2018 07:03:37
SF
Hola,
https://ms-office-forum.net/forum/showthread.php?t=354131
Gruß,
steve1da
Anzeige

6 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige