Clever-Excel-Forum

Normale Version: Aus Excel mit VBA Serienbrief im Word speichern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4
@snb Super vielen Dank, mein Problem ist nun Endgültig gelöst Big Grin Ich danke allen für ihre Hilfe
Hallo snb
Müsste dann der  index 0 nicht wieder auf 1 gestellt werden am Ende der Prozedur (um an der Maschine nichts dauerhaft zu verändern)?
Gruss
Ich kenne niemand die begeistert ist von der SQL-Meldung.
Und es macht Word nicht besser geschützt.
Diese Registerschlüssel macht Word >2003 nur mehr ähnlich wie Word 2000.
Hallo
Ich arbeite mit Office 2013.
Etwas ist schon eigenartig. Die Meldung kriege ich nicht in einer Arbeit, die ich vor 2 Jahren gemacht habe. Hier der Code, vielleicht kann mir einer sagen, was ich speziell anders und unbewusst richtig gemacht habe.
Code in einem VBA-Modul
Code:
Sub Druck_Vorlage_öffnen() 'Annahme: es ist immer eine Word - Vorlage
   'early binding: erfordert einen Verweis auf Microsoft Word 15.0 (14) Object Library
   'Dim WordApp As New Word.Application
   'On Error GoTo 0
   'Application.DisplayAlerts = True
   'strPfad = VBA.Left(ThisWorkbook.Path, VBA.InStrRev(ThisWorkbook.Path, "\", -1) - 1)
   'strPfad = strPfad & "\" & "ADRESSIERVORLAGEN"
   'With WordApp
   '    .Documents.Open(strPfad & "\" & strFokus).Application.Visible = True
   '    .Documents(strPfad & "\" & strFokus).Application.Activate
   '    .Run "Filter_einstellen", strFilter, sngJahr
   'End With
   'Set WordApp = Nothing
   
   'late binding
   Dim objWord As Object
   Set objWord = CreateObject("Word.Application")
   On Error GoTo 0
   Application.DisplayAlerts = True
   strPfad = VBA.Left(ThisWorkbook.Path, VBA.InStrRev(ThisWorkbook.Path, "\", -1) - 1)
   strPfad = strPfad & "\" & "ADRESSIERVORLAGEN"
   With objWord
       .Documents.Open(strPfad & "\" & strFokus).Application.Visible = True
       .Documents(strPfad & "\" & strFokus).Application.Activate
       .Run "Filter_einstellen", strFilter, sngJahr
   End With
   Set objWord = Nothing
End Sub
Und die mit .Run "Filter_einstellen", strFilter, sngJahr aufgerufene Prozedur in der Word-Vorlage:
Code:
Sub Filter_einstellen(strFilter, sngJahr)
   Dim strPfad As String
   'Stop
   strPfad = VBA.Left(ThisDocument.Path, VBA.InStrRev(ThisDocument.Path, "\", -1) - 1)
   strPfad = strPfad & Application.PathSeparator & "MITGLIEDERLISTE\Mitgliederliste " & sngJahr & ".xls"

   With ActiveDocument.MailMerge
       .OpenDataSource Name:=strPfad _
       , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
       AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
       WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
       Format:=wdOpenFormatAuto, Connection:= _
       "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & strPfad & ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:" _
       , SQLStatement:="SELECT * FROM `Adressenliste$`", SQLStatement1:=strFilter, _
       OpenExclusive:=True, SubType:=wdMergeSubTypeAccess
       .ViewMailMergeFieldCodes = wdToggle   'True
   End With
End Sub
Hängt das etwa zusammen mit early bindig / late binding oder gibt es doch irgendwo einen versteckten Schalte (den ich trotz intensiver Suche nicht gefunden habe)?
Gruss
Zitat:Die Meldung kriege ich nicht in einer Arbeit, die ich vor 2 Jahren gemacht habe.
Weil du jedesmal eine neue SQL-Abfrage erstellst.
Wenn die SQL-Abfrage jedoch in der Datei gespeichert ist, wird beim öffnen der Datei die Meldung immer gezeigt.
Danke! Ganz einfach Glück gehabt und am richtigen Ort abgeschrieben.
Gruss
Halli Hallo, leider kam es beim Testen meiner Datei erneut zu Fehlern.

Zum Testen hab ich euch meine Datei in den Anhang gepackt. Ihr müsst nur unter Userform "UF_Praktika" den Dateipfad ändern, wo ihr den Serienbrief ablegt und später speichert.

Nun zum Problem. Es kommt zu einem Fehler bei folgendem Szenario.
1. Ich rufe mir einen bereit erstellten Praktikanten auf und erstelle für diesen einen Zwischenbescheid.
2.Wenn ich einen neuen Praktikanten anlege und mir diesen dann Aufrufe, so kann ich für diesen keinen Serienbrief erstellen. Hier kommt es zu einer Fehlermeldung. Hintergrund ist anscheinend, dass Word nicht richtig geschlossen wird, denn wenn ich im task-Manager unter Prozesse schaue, wird Word immer noch ausgeführt. Ich habe hier nun versucht Word nach Ausführung komplett zu schließen über:
Code:
Word.Application.Quit
 Das funktioniert zwar beim ersten mal ausführen, aber leider nicht mehr beim 2. mal.
Habt ihr eine Lösung für mich, wie ich nach aufrufen des Serienbriefes Word komplett schließen kann?
Hallo Eichi
Ich habe da bei einem, der offenbar dasselbe Problem wie Du hast gefunden. Ich habe es nicht getestet:
               
appWord.Documents.Close
appWord.Quit
Set doc = Nothing
Set wdApp = Nothing
Das ist mein Code für den Serienbrief
Code:
Sub Serienbrief_erstellen(ByVal Zeile As Double, ByVal Vorname As String, ByVal Nachname As String, ByVal Pfad_Serienbrief As String, ByVal SpeicherPfad As String, ByVal Dateiname As String)
Application.DisplayAlerts = False
CreateObject("Wscript.shell").regwrite "HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word\Options\SQLSecurityCheck", 0, "REG_DWORD"

With GetObject(Pfad_Serienbrief)
       With .MailMerge
           .Destination = 0
           .SuppressBlankLines = True
           With .DataSource
               .FirstRecord = Zeile
               .LastRecord = Zeile
           End With
'            .OpenDataSource ThisWorkbook.FullName
           .Execute
       End With
       
'        ChangeFileOpenDirectory SpeicherPfad
'        ActiveDocument.SaveAs2 Filename:= _
'        SpeicherPfad & Dateiname & ".docx", _
'        FileFormat:=wdFormatXMLDocument, LockComments:=False, Password:="", _
'        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
'        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
'        :=False, SaveAsAOCELetter:=False, CompatibilityMode:=14
     
       
   .Application.ActiveDocument.SaveAs2 SpeicherPfad & Dateiname & ".docx"
   '.Application.ActiveDocument.Close 0
   .Application.Documents.Close 0
   Word.Application.Quit



   End With
'Word.Application.Quit

Application.DisplayAlerts = True
End Sub
So beim ersten mal ausführen, klappt der Code wunderbar. Mein Serienbrief wird gespeichert und Word geschlossen.
Will ich nun aber einen anderen Serienbrief erstellen oder den selben nochmal erstellen kommt folgende Fehlermeldung:
Laufzeitfehler 462
Der Remote-Server-Computer existiert nicht oder ist nicht verfügbar.
Klicke ich auf debuggen markiert er mir "Word.Application.Quit"
Hallo Eichi
Tut mir leid: kann keinen Fehler sehen. Tests möchte ich nicht machen, weil ich a) die Umgebung nicht habe und b) nicht in die Registriy eingreifen möchte. Wie Du weiter oben siehst, gehe ich einen andern Weg. Ich erinnere mich nicht mehr genau: aber ich glaube es war auch diese blöde Verknüpfungsmeldung die mich weiter suchen liess und schlussendlich zu dem gelungenen Resultat führte.
Seiten: 1 2 3 4