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.