Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: dierk1804 am Juli 27, 2014, 16:38:14

Titel: Serienbrief Fehler 4160
Beitrag von: dierk1804 am Juli 27, 2014, 16:38:14
Hallo zusammen,
Entschuldigung wenn ich nochmals zu dem Thema nerven muss.
Bei meinem Code bekomme ich plötzlich eine Fehlermeldung 4160 "ungültiger Dateiname"
Was mache ich nun wieder falsch????
Dim WordObj As Object
Dim myDocname As String

myDocname = "Serie"

Set WordObj = CreateObject("Word.Application")

WordObj.Documents.Open "C:\\Serienbrief.doc"
WordObj.Visible = True
'Zeile die Fehlermeldung auslöst
WordObj.Documents("C:\\Serienbrief.doc").MailMerge.Destination = wdSendToNewDocument
WordObj.Documents("C:\\Serienbrief.doc").MailMerge.Execute

WordObj.ActiveDocument.SaveAs FileName:=myDocname
WordObj.Documents("C:\\Serienbrief.Doc").Close SaveChanges:=wdDoNotSaveChanges

Für Hilfe wäre ich dankbar
Titel: Re: Serienbrief Fehler 4160
Beitrag von: DF6GL am Juli 27, 2014, 16:44:24
Hallo,


"plötzlich"..?  oder gab es eine Änderung  zwischenzeitlich?


ZitatmyDocname = "Serie"

an sich ist wohl kein gültiger (akzeptabler) Dateiname..

Zudem sollten Doppel-Schrägstriche im Pfad-Nehmen nicht vorkommen und man sollte sich mit definierten Objektvariablen auf die Word-Objekte beziehen.. (set aktDoc = WordObj.....)
Titel: Re: Serienbrief Fehler 4160
Beitrag von: dierk1804 am Juli 27, 2014, 17:10:07
Hallo,
ich habe den von letzter Woche vorgeschlagenen Link so wie beschrieben durchgeführt und der hat funktioniert. Allerdings funktioniert dieser nicht wenn ich den Quellcode in meiner DB einsetze.
Wo sollte ich den (set aktDoc = WordObj.....) einsetzen und wie lautet der vollständige Befehl?
Entschuldige wenn ich als Anfänger ein wenig nerve.
Titel: Re: Serienbrief Fehler 4160
Beitrag von: MaggieMay am Juli 27, 2014, 19:58:06
Hallo,

du wärest besser im alten Thread geblieben, dann wüsste man gleich worum (und um welchen Link) es geht.

Zeig doch bitte deinen aktuellen, nicht funktionierenden Code, mit Hinweis darauf, was falsch läuft bzw. wo welcher Fehler auftritt.
Titel: Re: Serienbrief Fehler 4160
Beitrag von: dierk1804 am Juli 28, 2014, 09:18:47
Hallo MaggieMay,

die Stelle im Code habe ich mit 'Stelle an dem der Fehler auftritt markiert.

Titel: Re: Serienbrief Fehler 4160
Beitrag von: MaggieMay am Juli 28, 2014, 12:34:04
Hi,

mach mal aus dem Doppel-Backslash einen einfachen.
Titel: Re: Serienbrief Fehler 4160
Beitrag von: dierk1804 am Juli 28, 2014, 19:00:08
Hallo,
\\ habe ich bereits entfernt und mydocname in Serie.doc geändert. Der Fehler bleibt.
Titel: Re: Serienbrief Fehler 4160
Beitrag von: MaggieMay am Juli 28, 2014, 19:47:40
Hi,
Zitat von: dierk1804 am Juli 27, 2014, 17:10:07Wo sollte ich den (set aktDoc = WordObj.....) einsetzen
wo in deinem Code kommt das denn vor bzw. was hast du damit vor?

Zeig doch bitte noch einmal die aktuelle Version deines Codes.
Die Datei "C:\Serienbrief.Doc" existiert??
Titel: Re: Serienbrief Fehler 4160
Beitrag von: dierk1804 am Juli 29, 2014, 06:17:10
Hallo,

Die Datei Serienbrief.doc existiert.
Der Code:
Dim WordObj As Object
Dim myDocname As String

myDocname = "Serienbrief.doc"

Set WordObj = CreateObject("Word.Application")

WordObj.Documents.Open "C:\Serienbrief.doc"
WordObj.Visible = True
'Zeile die Fehlermeldung auslöst
WordObj.Documents("C:\Serienbrief.doc").MailMerge.Destination = wdSendToNewDocument
WordObj.Documents("C:\Serienbrief.doc").MailMerge.Execute

WordObj.ActiveDocument.SaveAs FileName:=myDocname
WordObj.Documents("C:\Serienbrief.Doc").Close SaveChanges:=wdDoNotSaveChanges

Ich habe ein Formular mit Datenanbindung an die Abfrage auf dem ein Button ist, der den Serienbrief starten soll. Vor der Fehlermeldung wird Word gestarten, doch das Dokument verbindet nicht. Das Serienbriefdokument hatte ich vorher mit der Abfrage verbunden und gespeichert.
Muss ich vielleicht vorher die Abfrage öffnen? In manchen Codes fand ich das Füllen einer Variablen varsql=Select(*,......) Muss ich diese im Code integrieren?


Titel: Re: Serienbrief Fehler 4160
Beitrag von: DF6GL am Juli 29, 2014, 09:34:19
Hallo,

funktionierendes Beispiel:

--Verweis auf die Word-Library setzen.
--Dot-Datei anstelle Doc-Datei benutzen und neues Doc erstellen
--Datenquelle in dot-Datei verbinden und Seriendruckfelder einfügen
--Datenquelle bei Mailmerge-Methode angeben


Dim WordObj As Object
Dim myDocname As String

myDocname = "d:\Serienbrief.doc"

Set WordObj = CreateObject("Word.Application")

WordObj.Documents.Add "d:\Serienbrief.dot"
WordObj.Visible = True

With WordObj.ActiveDocument.MailMerge
    .OpenDataSource Name:="C:\Datasources\test1.mdb"
    .Destination = wdSendToNewDocument
    .Execute
End With

WordObj.ActiveDocument.SaveAs FileName:=myDocname

WordObj.Quit SaveChanges:=wdDoNotSaveChanges
Set WordObj = Nothing
Titel: Re: Serienbrief Fehler 4160
Beitrag von: dierk1804 am Juli 29, 2014, 12:26:37
Hallo,
ich verzweifle bald.
Jetzt kommt eine Fehlermeldung 5174
Wir konnten Ihre Datei nicht finden. Wurde möglicherweise verschoben, umbenannt oder gelöscht.
Markierung steht bei:
WordObj.Documents.Add "c:\Serienbrief.dot"
Datei ist vorhanden. Irgend etwas mache ich hier falsch???
Titel: Re: Serienbrief Fehler 4160
Beitrag von: MaggieMay am Juli 29, 2014, 12:57:05
Hast du denn die Datei auch umbenannt???
Titel: Re: Serienbrief Fehler 4160
Beitrag von: dierk1804 am Juli 29, 2014, 13:16:21
umbenannt???
muss ich dies irgendwo machen?
Alle Dateien sind so wie sie sind und liegen auch wo sie sind.
Titel: Re: Serienbrief Fehler 4160
Beitrag von: MaggieMay am Juli 29, 2014, 13:49:23
Ich meine, vorher hattest du eine doc-Datei und nun ist es eine Vorlagendatei, ich wollte nur sicher gehen, dass dir das bewusst ist.
Und überhaupt, niemand legt seine Vorlagen auf C:\ ab, daraus darf man wohl schließen, dass du hier nicht den Originalcode zeigst, aber wie soll man in Pseudocode auf Fehlersuche gehen?!
Titel: Re: Serienbrief Fehler 4160
Beitrag von: dierk1804 am Juli 29, 2014, 14:04:28
Hallo,
hier der Originalcode:
Dim WordObj As Object
Dim myDocname As String

myDocname = "T:\QS\Formblätter\BTE\FB 07-10 Lieferantenanschreiben A.docx"

Set WordObj = CreateObject("Word.Application")

WordObj.Documents.Add "T:\QS\Formblätter\BTE\FB 07-10 Lieferantenanschreiben A.dotx"
WordObj.Visible = True

With WordObj.ActiveDocument.MailMerge
    .OpenDataSource Name:="T:\Lieferantenmanagement\Lieferantenbewertung_FE.accdb"
    .Destination = wdSendToNewDocument
    .Execute
End With

WordObj.ActiveDocument.SaveAs FileName:=myDocname

WordObj.Quit SaveChanges:=wdDoNotSaveChanges
Set WordObj = Nothing
Titel: Re: Serienbrief Fehler 4160
Beitrag von: MaggieMay am Juli 29, 2014, 14:34:56
Handelt es sich denn überhaupt um eine Seriendruckvorlage?
Neben dem DB-Namen wirst du auch die Datenquelle übergeben müssen, oder wie soll die Verbindung zur Tabelle oder Abfrage hergestellt werden?
Titel: Re: Serienbrief Fehler 4160
Beitrag von: dierk1804 am Juli 29, 2014, 14:48:44
Die Quelle zuordnen müsste man auch, das hatte mich auch gewundert.
Ich habe eine Abfrage "Serienbrief A" in meiner DB. Wo muss ich die den einbinden?
Das Word Document ist als Serienbrief hinterlegt. Wenn ich das Dokument ausserhalb Access starte stellt Word die Verbindung her und die Daten werden angezeigt.

Titel: Re: Serienbrief Fehler 4160
Beitrag von: DF6GL am Juli 29, 2014, 17:20:54
Hallo,

nochmal:

Dot(!)-Datei vorbereiten mit eingefügten Serienbrieffeldern. Das kann geschehen über manuelles Einfügen von Feldfunktionen oder durch Verbinden einer Datenquelle  und einfügen über die entspr. Ribbon-Punkte ("Sendungen"). Word-Dokument als Dot(!!) -Datei abspeichern.

Wenn die Datenquelle (Access-Datei) mehrere Tabellen/Abfragen enthält, dann müssen die benötigte Tabelle/Abfrage bei Mailmerge mit angegeben werden:

With WordObj.ActiveDocument.MailMerge
    .OpenDataSource _
     Name:="T:\Lieferantenmanagement\Lieferantenbewertung_FE.accdb", _
     SqlStatement:="select * from [Serienbrief A]"
    .Destination = wdSendToNewDocument
    .Execute
End With



btw: Auf Sonder- und Leerzeichen in Objektnamen verzichten !!!!

PS: das Verbinden einer Datenquelle mit dem Hauptdokument wird nur beim Öffnen/Erstellen einer Word-Datei mit Word selber durchgeführt, NICHT bei Öffnen/Erstellen bei Word-Automation.
Titel: Re: Serienbrief Fehler 4160
Beitrag von: dierk1804 am Juli 30, 2014, 07:49:14
Hallo,
auch wenn ich nerve. Es klappt einfach nicht.
Fehler: Datei kann nicht gefunden werden.
WordObj.Documents.Add "T:\QS\Formblätter\BTE\FB 07-10 Lieferantenanschreiben A.dotx"
Ich habe die Datei auch Versuchsweise umbenannt (ohne Leerzeichen) und in einen lokalen Pfad gesetzt. Der Fehler bleibt.
Titel: Re: Serienbrief Fehler 4160
Beitrag von: DF6GL am Juli 30, 2014, 09:31:44
Hallo,

ich behaupte mal, dass "Datei kann nicht gefunden werden."  stimmt...

Was passiert, wenn Du auf die Datei im Windows-Explorer doppelklickst?
Titel: Re: Serienbrief Fehler 4160
Beitrag von: dierk1804 am Juli 30, 2014, 12:06:30
Hallo,
wenn ich die Datei über den Explorer öffne bringt Word die Meldung:
Beim öffnen wird folgender SQL Befehl ausgeführt. Select * from Serienbrief A
Bei OK öffnet das Dokument und die Abfrage ist verbunden.
Titel: Re: Serienbrief Fehler 4160
Beitrag von: DF6GL am Juli 30, 2014, 13:02:24
Hallo,

ok, dann prüf nochmal genau(!) die Schreibweise des Dateinamens im Code...

Alternativ:  den Pfadnamen aus der Windows-Explorer-Adress-Leiste kopieren und in den Code einfügen, sodann den Dateinamen im Explorer markieren und ebenfalls im Code anfügen...
Titel: Re: Serienbrief Fehler 4160
Beitrag von: dierk1804 am Juli 30, 2014, 16:57:15
Hallo,

Hurra, es klappt.
Vielen Dank für die Geduld und die guten Ratschläge. Was ein Leerzeichen doch so ausmacht.

Was würde ich nur ohne euch machen.
Titel: Re: Serienbrief Fehler 4160
Beitrag von: DF6GL am Juli 30, 2014, 16:59:06
ja, das frage ich mich auch  ... 8)