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.
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?
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
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.