pcfjkg
Goto Top

ACC2010, VBA, Serinebriefbeispiel. Objektvariable oder With-Blockvariable nicht festgelegt

Verweis eingebunden und Variable deklariert. MS-Access meint aber: nicht festgelegt

Ich habe zur Nutzung der Serienbrieffunktion von MS-Word ein Beispiel aus dem I-Net nutzen wollen:
(
Google:

Autor/Einsender: Angie
Datum: '17.03.2005

Public Function CreateAndPrintDoc(ByRef sMsg As String) As Boolean .........
)

Habe bei mir in Verweise eingetragen: _
Microsoft Word 14.0 Object Library

Dann in einem Modul in einer Prozedur:

Dim strFileName As String
Dim objWDDoc As Word.Document
Dim objWDApp As Word.Application

strFileName = "N:\Vorlagen\Erklär.doc"
Set objWDDoc = objWDApp.Documents.Open(FileName:=strFileName)

Das Dokument liegt exakt an dem bezeichneten Ort, der Fehler kommt in der SET-Zeile. Warum meint Access, dass <objWDDoc> nicht festgelegt ist, wenn ich es doch als Word.Document
deklariert habe ?

Bitte keine Hinweise auf Donkarl oder andere Internetveröffentlichungen zu Serienbriefen. Diese sind entweder so komplex, daß ich sie nicht kapiere (wenn beim Kompilieren Fehlermeldungen kommen - und das war bei jedem Beispiel der Fall -) oder lösen mein Problem nicht; es soll nämlich ein Serienbrief (auf Basis einer Tabelle in einer *.mdb) sofort gedruckt werden.

VISTA 64 Bit
MS-Office 2010

Kann jemand bitte die Frage beantworten oder hat vielleicht sogar eine funktionierende VBA-Lösung, die man sofort nutzen kann ?

Vielen Dank,

PCFJKG

Content-Key: 154774

Url: https://administrator.de/contentid/154774

Printed on: April 25, 2024 at 21:04 o'clock

Member: miniversum
miniversum Nov 10, 2010 at 15:05:11 (UTC)
Goto Top
Ungetestet kannst du es mal so versuchen:
Dim strFileName As String
Dim objWDDoc As Object

strFileName = "N:\Vorlagen\Erklär.doc"  
Set objWDDoc = GetObject(strFileName)
Member: Biber
Biber Nov 10, 2010 at 19:18:59 (UTC)
Goto Top
Moin PCFJKG,

alternativ zu miniversums Strategie könntest du ja versuchen, irgendetwas mit der Variable "objWDDoc" zu machen außer sie zu deklarieren.

Die Variable "objWDDoc" ist doch in deiner Zeile...
Set objWDDoc = objWDApp.Documents.Open(FileName:=strFileName)
...eine so leere Hülse wie Paris Hilton.

Mach doch vorher ein:

Set objWDApp = New Word.Application

Grüße
Biber
Member: PCFJKG
PCFJKG Nov 11, 2010 at 04:41:21 (UTC)
Goto Top
Hallo Biber,
genau das wars. Danke !: für Schnelligkeit sowieso und verständliche/nutzbare Antwort (wobei Paris ggf. leer aber ganz hübsch ist...). Zu meine eigenen Unvermögen erspare ich mir einmal einen Kommenntar. Ich hoffe es ist nicht unverschämt, wenn ich zum Serienbrief noch eine Zusatzfrage stelle, den Code habe ich aus dem I-Net:

 
Dim wDDoc As Word.Document
Dim wDApp As Word.Application

Set wDApp = CreateObject("Word.Application")  
Set wDDoc = wDApp.Documents.Open(strTemplate)  /*strTemplate beinhaltet Pfad und Filename mit extention .dot */

dBSource = "N:\Vorlagen\SBS.mdb"  
   
 With wDApp
        .ActiveDocument.MailMerge.OpenDataSource Name:=dBSource _
                                               , ConfirmConversions:=False, ReadOnly:=False _
                                               , LinkToSource:=True, AddToRecentFiles:=False _
                                               , PasswordDocument:="", PasswordTemplate:="" _  
                                               , WritePasswordDocument:="", WritePasswordTemplate:="" _  
                                               , Revert:=False, Format:=wdOpenFormatAuto _
                                               , Connection:="Provider=Microsoft.Jet.OLEDB.4.0;" _  
                                                           & "User ID="";" _  
                                                           & "Mode=Read;Extended Properties="""";" _  
                                                           & "Jet OLEDB:System database="""";" _  
                                                           & "Jet OLEDB:Registry Path="""";" _  
                                                           & "Jet OLEDB:Database Pas" _  
                                               , SqlStatement:="SELECT * FROM 'T_WordSource'" _  
                                               , SQLStatement1:="" _  
                                               , SubType:=wdMergeSubTypeAccess
    End With 
Ergebnis: <Word konnte die Datenquelle nicht öffnen>.

Weißt Du auch hier Rat ?

Viele Grüße

PCFJKG

[Edit] Codeformatierung nachgetragen. [/Edit]
Member: PCFJKG
PCFJKG Nov 11, 2010 at 04:45:26 (UTC)
Goto Top
Hallo miniversum,

auch Dir vielen Dank (warum nennst Du Dich mini wenn Du maxi antwortest ?). Ansonsten siehe Antwort an Biber und nochmals: Danke für die schnelle Hilfe !

Viele Grüße

PCFJKG
Member: Biber
Biber Nov 11, 2010 at 09:07:51 (UTC)
Goto Top
Moin PCFJKG,

da kann ich nur sagen, was mir sofort ins Auge fällt.

In der Zeile, die ich jetzt dank Codeformatierung als Zeile 23 angeben kann, scheint das Copy&Paste aus dem internet verstümmelt zu sein.
Wo bei dir jetzt steht:
& "Jet OLEDB:Database Pas" _
sollte bestimmt ein String stehen der Art
& "Jet OLEDB:Database Password="";" _

Kannst du mal den Link deiner internet-Quelle mit posten bitte?

Grüße
Biber
Member: miniversum
miniversum Nov 11, 2010 at 11:34:57 (UTC)
Goto Top
Ersetze in Zeile 6 das "/* " gegen ein "' "
Member: PCFJKG
PCFJKG Nov 11, 2010 at 15:32:10 (UTC)
Goto Top
Hallo Biber,

sehr gern:

http://www.office-loesung.de/ftopic380835_0_0_asc.php


Es geht dort um Word-Serienbrief Etiketten ...

Danke für Dein Angebot.

Viele Grüße


PCFJKG
Member: Biber
Biber Nov 11, 2010 at 20:15:13 (UTC)
Goto Top
Moin PCFJKG,

dem Link nach zu urteilen, scheint das Skriptkrams des ursprünglichen Autors ja auch nur bedingt zu laufen.

Ich vermute aber stark, dass der Fehler irgendwo in den vielen vielen überflüssigen und unnötigerweise übergebenen Parameter der .OpenDataSource-Methode verschüttet liegt.

Einen der "unglaubwürdigen" Parameter hatte ich schon gepostet, der "halbe Leerstring" bei der Nicht-"User ID" ist ein zweiter Kandidat für ein Syntaxkauderwelsch.

Wenn ich bei meinem (etwas älteren) Word in der VBA-Hilfe das von M$ verfasste Beispiel zu .MailMerge.OpenDataSource anschaue, dann sieht es wesentlich schlanker aus:

' In diesem Beispiel wird ein neues Hauptdokument erstellt   
'und die Tabelle Orders der Microsoft Access-Datenbank Northwind.mdb angefügt.  

Dim docNew As Document

Set docNew = Documents.Add

With docNew.MailMerge
    .MainDocumentType = wdFormLetters
    .OpenDataSource _
        Name:="C:\Program Files\Microsoft Office" & _  
        "\Office\Samples\Northwind.mdb", _  
        LinkToSource:=True, AddToRecentFiles:=False, _
        Connection:="TABLE Orders"  
End With

Insbesondere dem Hinweis, dass bei der letzten Parameterzeile ein einfaches "Connection:=TABLE orders"
bzw bei dir ein "Connection:=TABLE T_wordsource" reichen könnte, dem solltest du mal nachgehen.

Wegen vollkommen unterschiedlicher Umgebungen und Versionsstände kann ich dir das Testen leider nicht abnehmen und kann auch nur mitraten.

Grüße
Biber
Member: PCFJKG
PCFJKG Nov 12, 2010 at 09:08:02 (UTC)
Goto Top
Hallo Biber,

nun habe ich wenigstens eine Spur. Zwar druckt beim ersten schellen Test Deines Codes MS-Word noch nicht den Serienbrief (Ist nur gestartet im Task-Manager zu sehen), aber ich bekomme zumindest keine Fehlermeldung mehr. Nun kann ich weiter probieren.

Damit erneut ein Dank an Dich ! Ich wünsche Dir ein schönes WE und sende

viele Grüße


PCFJKG
Member: PCFJKG
PCFJKG Nov 12, 2010 at 09:21:37 (UTC)
Goto Top
Hallo miniversum,

das /* ist im "richtigen Code nicht vorhanden, sondern nur hier im Beitrag als Kommentarsyntax verwendet (Angewohnheit vom SQL-SERVER). Aber ich habe eine Testmöglichkeit, die nicht jedesmal den Debugger auf den Plan ruft (siehe Antwort an Biber). Wie ich den automatisierten Seriendruck hinbekomme weiß ich zwar noch nicht, aber ich denke irgendwie muß mailmerge mit MS-Word zum laufen zu bringen sein. Vielleicht finde ich auch im I-Net einCodebeispiel, welches tatsächlich ohne Fehlermeldungen läuft.

Auch Dir natürlich ein schönes WE und danke für Deine Antwort.

Viele Grüße


PCFJKG