Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Aus Excel mit VBA Serienbrief im Word speichern
#1
Hallo ihr Lieben,
ich bin heute an die Grenze meiner VBA-Kenntnisse gestoßen. Folgendes Problem habe ich dabei:

Ich habe im Excel eine Art Datenbank erstellt. Über verschiedene Userformen können Personen neu angelegt oder aufgerufen werden. Hier sind dann verschiedene Daten wie Name, Wohnort und ähnliches hinterlegt. Aus einer dieser Userformen will ich über einen Button direkt für die jeweilig aufgerufene Person einen Serienbrief erstellen. Die Serienbriefdatei wurde bereits erstellt und mit der Tabelle verknüpft. Wichtig wäre eventuell noch, dass sich die Userformen, also das Programm und die Ergebnisliste in einer Datei befinden. 

Ich habe bereits folgenden Code für die Verknüpfung zu Word erstellt:

Code:
Option Explicit

Sub fp_Excel_Word_Serienbrief_erstellen()

Dim ws As Worksheet
Set ws = ActiveSheet
Dim varRange As Excel.Range


'*diese Funktion oeffnet den Serienbrief "Serienbrief.docx"
Dim sFilename As String
sFilename = "H:\Eigene Datein\Aktuelle Aufgaben\Serienbriefvorlagen\Serienbrief.docx"

'< Word starten >
Dim wordApp As Object
Set wordApp = CreateObject("Word.Application")
wordApp.Visible = True
'</ Word starten >

'< Word Document oeffnen >
Dim doc As Word.Document 'word-dll
Set doc = CreateObject("Word.Document")
Set doc = wordApp.Documents.Open(sFilename, ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False)

'Anweisung in Word aufgezeichnet
'Sendung zusammenführen
'Zahl 1 einfügen um 1. Ergebniss zu erhalten
'diese Datei abspeichern

With ActiveDocument.MailMerge
       .Destination = .wdSendToNewDocument
       .SuppressBlankLines = True
       With .DataSource
           .FirstRecord = 1
           .LastRecord = 1
       End With
       .Execute Pause:=False
   End With
   ChangeFileOpenDirectory "H:\Eigene Datein\Aktuelle Aufgaben\Testdateien\"
   ActiveDocument.SaveAs2 Filename:= _
       "H:\Eigene Datein\Aktuelle Aufgaben\Testdateien\Max Mustermann.docx", _
       FileFormat:=wdFormatXMLDocument, LockComments:=False, Password:="", _
       AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
       EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
       :=False, SaveAsAOCELetter:=False, CompatibilityMode:=14
   ActiveWindow.Close


End Sub
 In der Excel-Entwicklungsumgebung habe ich über Extras - Verweise schon Microsoft Word 14.0 Object Library aktiviert. Ich benutze Office 2010
Wenn ich den Code ausführe kommt folgende Fehlermeldung.
Fehler beim Kompilieren
Methode oder Datenobjekt nicht gefunden
Klicke ich hier auf ok, markiert er mir .Destination = .wdSendToNewDocument 
Habt ihr eventuell eine Lösung für mein Problem?
vielen dank schon mal
Gruß Felix
Antworten Top
#2
Hallo Felix
Versuch es mal mit diesem Code. Ich konnte Ihn hier nicht testen wegen der fehlenden Quelle. Aber der der Debugger bracht.wdSendToNewDocumente mal keinen Kompilierungsfehler. Ich habe nur einen Verweis gemacht auf das WordObject und denn im Code  dem .wdSendToNewDocument WordObj vorne angestellt.
Gruss
Zitat:Sub fp_Excel_Word_Serienbrief_erstellen()
Dim WordObj As Object
Dim ws As Worksheet
Set ws = ActiveSheet
Dim varRange As Excel.Range

'*diese Funktion oeffnet den Serienbrief "Serienbrief.docx"
Dim sFilename As String
 sFilename = "H:\Eigene Datein\Aktuelle Aufgaben\Serienbriefvorlagen\Serienbrief.docx"
'< Word starten >
Dim wordApp As Object
Set wordApp = CreateObject("Word.Application")
 wordApp.Visible = True
'
'< Word Document oeffnen >
Dim doc As Word.Document 'word-dll
Set doc = CreateObject("Word.Document")
Set doc = wordApp.Documents.Open(sFilename, ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False)
'Anweisung in Word aufgezeichnet
'Sendung zusammenführen
'Zahl 1 einfügen um 1. Ergebniss zu erhalten
'diese Datei abspeichern
With ActiveDocument.MailMerge
        .Destination = WordObj.wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = 1
            .LastRecord = 1
        End With
        .Execute Pause:=False
    End With
    ChangeFileOpenDirectory "H:\Eigene Datein\Aktuelle Aufgaben\Testdateien\"
    ActiveDocument.SaveAs2 Filename:= _
        "H:\Eigene Datein\Aktuelle Aufgaben\Testdateien\Max Mustermann.docx", _
        FileFormat:=wdFormatXMLDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False, CompatibilityMode:=14
    ActiveWindow.Close

End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Helvetier für diesen Beitrag:
  • Eichi06
Antworten Top
#3
Danke für deinen Beitrag. Nun erscheint nicht mehr meine Fehlermeldung sondern eine neue:

Laufzeitfehler '91':
Objektvariable oder With-Blockvariable nicht festgelegt

Klicke ich dann auf Debuggen kommt ebenfalls wieder die selbe Zeile als Fehler
Antworten Top
#4
Es ist ein Ratespiel: die Testumgebung (Datenquelle, Datensenke) fehlt hier und aufbauen mag ich sie nicht.
Code:
Sub fp_Excel_Word_Serienbrief_erstellen()
Dim WordObj As Object
Dim ws As Worksheet
Set ws = ActiveSheet
Dim varRange As Excel.Range


'*diese Funktion oeffnet den Serienbrief "Serienbrief.docx"
Dim sFilename As String
sFilename = "H:\Eigene Datein\Aktuelle Aufgaben\Serienbriefvorlagen\Serienbrief.docx"

'< Word starten >
Dim wordApp As Object
Set wordApp = CreateObject("Word.Application")
wordApp.Visible = True
'</ Word starten >

'< Word Document oeffnen >
Dim doc As Word.Document 'word-dll
Set doc = CreateObject("Word.Document")
Set doc = wordApp.Documents.Open(sFilename, ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False)

'Anweisung in Word aufgezeichnet
'Sendung zusammenführen
'Zahl 1 einfügen um 1. Ergebniss zu erhalten
'diese Datei abspeichern

With ActiveDocument.MailMerge
       .Destination = WordObj.wdSendToNewDocument
       .SuppressBlankLines = True
       With WordObj.DataSource
           .FirstRecord = 1
           .LastRecord = 1
       End With
       .Execute Pause:=False
   End With
   ChangeFileOpenDirectory "H:\Eigene Datein\Aktuelle Aufgaben\Testdateien\"
   ActiveDocument.SaveAs2 Filename:= _
       "H:\Eigene Datein\Aktuelle Aufgaben\Testdateien\Max Mustermann.docx", _
       FileFormat:=wdFormatXMLDocument, LockComments:=False, Password:="", _
       AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
       EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
       :=False, SaveAsAOCELetter:=False, CompatibilityMode:=14
   ActiveWindow.Close
End Sub
Teste dfies:
[-] Folgende(r) 1 Nutzer sagt Danke an Helvetier für diesen Beitrag:
  • Eichi06
Antworten Top
#5
Leider bringt das auch keinen Erfolg.

Ich hab dir mal ein Zip-Ordner mit Probedateien gemacht. Dort musst du nur die entsprechenden Pfade ändern. Eventuell bringt dir/euch das was.


Angehängte Dateien
.zip   Testversion.zip (Größe: 37,11 KB / Downloads: 10)
Antworten Top
#6
2 Fehler

1. sendtonewdocument ist kein Eigenschaft: also die Punkt kreiert ein Fehler
2. in LateBinding erkennt VBA keine 'Worte': parameter sendtonewdocument=0

     
Code:
With getObject("H:\Eigene Datein\Aktuelle Aufgaben\Serienbriefvorlagen\Serienbrief.docx").MailMerge
       .Destination = 0
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Eichi06
Antworten Top
#7
Danke für den Beitrag, aber selbst wenn ich das ändere, kommt wieder eine Fehlermeldung:

Laufzeitfehler '5852'
Das angeforderte Objekt ist nicht verfügbar

Klicke ich auf Debuggen kommt markiert er mir dann: .Destination = 0
Antworten Top
#8
Hallo snb
Du hast den Fehler gefunden und kannst dem Eichi sicher mit links den Code korrigieren. Danke!
Gruss
[-] Folgende(r) 1 Nutzer sagt Danke an Helvetier für diesen Beitrag:
  • Eichi06
Antworten Top
#9
(14.09.2017, 14:51)Eichi06 schrieb: Danke für den Beitrag, aber selbst wenn ich das ändere, kommt wieder eine Fehlermeldung:

Laufzeitfehler '5852'
Das angeforderte Objekt ist nicht verfügbar

Klicke ich auf Debuggen kommt markiert er mir dann: .Destination = 0

probier mal

With ActiveDocument.MailMerge
With doc.MailMerge
Gruß Jeanie
[-] Folgende(r) 1 Nutzer sagt Danke an Jeanie für diesen Beitrag:
  • Eichi06
Antworten Top
#10
Diese Code reicht:


Code:
Sub M_snb()
   With GetObject(ThisWorkbook.Path & "\Serienbrief.docx")
        With .MailMerge
            .Destination = 0
'            .OpenDataSource ThisWorkbook.FullName
            .Execute
        End With
    
        .Application.ActiveDocument.SaveAs2 ThisWorkbook.Path & "\Max Mustermann.docx"
        .Application.ActiveDocument.Close 0

        .Save
        .Close 0
    End With
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Eichi06
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste