Problem mit Funktion "ThisWorkbook.Path &"
#1
Code:
  Pfad = "c:\Laufwerkordner\Ordner1\test.docx"
  Dim wdAnw As Object
  Dim wdDok As Object
  Set wdDok = GetObject(Pfad)
  Set wdAnw = wdDok.Parent
  wdAnw.Visible = True
  wdAnw.WindowState = 1 '0 = Normal; 1 = Maximized; 2 = Minimized
  wdAnw.Activate
  'wdDok.Close
  'wdAnw.Quit
  Set wdAnw = Nothing
  Set wdDok = Nothing
Der o.a. Code funktioniert ohne Probleme und öffnet das Testdokument.
Jetzt möchte ich den Code mit "ThisWorkbook.Path &" anpassen, so dass ich die Datei auch an anderen PC´s über USB-Stick verwenden kann. Nach anpassen des Codes mit ThisWorkbook.Path & bricht die Funktion mit einem Laufzeitfehler 432 ab.

Folgende Anpassung hatte ich vorgenommen

Code:
Set wdDok = GetObject(ThisWorkbook.Path & "\Ordner\Test.docx")
Wo liegt mein Denkfehler?

Gruß
Roy
Top
#2
Moin!
Ich habe es getestet, läuft bei mir einwandfrei!
Ein Rechtschreibfehler ist ausgeschlossen?
Du hast im Code einmal \Ordner1\ und dann nur \Ordner\.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#3
Für den Tippfehler im Eingangsthreat entschuldige ich mich erstmal, denn der kam nur, weil ich aus Datenschutzgründen den Pfad geändert habe.

Weiter kann ich sicher ausschließen, dass es sich um einen Tippfehler handel, denn das habe ich mehr als einmal überprüft, bevor ich diesen Threat gestartet habe.

Auch ein erneuter Versuch kommt zum gleichen Ergebnis: Bei Angabe des ganzen Pfades funktionierts, mit "ThisWorkook.Path" nicht.

Gruß
Roy
P.S. Die jetztige Datei liegt auch nicht auf C: sondern auf Laufwerd D: , wobei ich jetzt nicht davon ausgehe, dass dieses ein Problem darstellt.
Top
#4
Zunächst mal der von mir getestete Code:
Sub Get_Word()
  Dim wdAnw As Object
  Dim wdDok As Object
  Set wdDok = GetObject(ThisWorkbook.Path & "\Unterordner\Blabla.docx")
  Set wdAnw = wdDok.Parent
  wdAnw.Visible = True
  wdAnw.WindowState = 0 '0 = Normal; 1 = Maximized; 2 = Minimized 
  wdAnw.Activate
  'wdDok.Close 
  'wdAnw.Quit 
  Set wdAnw = Nothing
  Set wdDok = Nothing
End Sub

Probiere mal statt GetObject CreateObject:
Sub StarteWord()
Dim objWordApp As Object
Dim strPfad As String
strPfad = ThisWorkbook.Path & "\Unterordner\Blabla.docx"
Set objWordApp = CreateObject("Word.application")
With objWordApp
.Application.Visible = True
.Application.Documents.Open (strPfad)
End With
Set objWordApp = Nothing
End Sub

Befindet sich die zu öffnende Datei im Netzwerk?

(25.03.2021, 08:07)Royalty schrieb: Bei Angabe des ganzen Pfades funktionierts, mit "ThisWorkook.Path" nicht.

Ist die Excel-Datei denn überhaupt gespeichert?
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#5
Die Exceldatei ist natürlich gespeichert und das auch im gleichen Ordner wie das Worddokument.

Habs jetzt mal mit dem Code versucht:

Code:
  Dim objWordApp As Object
  Dim strPfad As String
  strPfad = ThisWorkbook.Path & ("\Ordner\Testdatei.docx")
  Set objWordApp = CreateObject("Word.application")
  With objWordApp
  .Application.Visible = True
  .Application.Documents.Open (strPfad)
  End With
  Set objWordApp = Nothing
Tippfehler beim Ordner ist ausgeschlossen, da ich den Pfad über den Explorer kopiert und eingefügt habe.

Jetzt folgt "Laufzeitfehler 5174" und es wird mitgeteilt, dass die Datei nicht zu finden sei. Dateien sind aber vorhanden.

Gruß
Roy

P.S. Nein, (noch) kein Netzwerklaufwerk, wegen Homeoffice. Aber es soll natürlich auch später im Netzwerk auf dem Firmenrechner verwendet werden.
Top
#6
Lasse Dir mal direkt nach
strPfad = ThisWorkbook.Path & ("\Ordner\Testdatei.docx")
folgende MsgBox ausgeben:
MsgBox Dir(strPfad)

Wenn dort nicht Testdatei.docx steht, dann stimmt etwas an strPfad nicht.

Noch ein Versuch:
Ich habe meinen Test mal in ein Zip-Archiv gepackt.
► Entpacke GetObject.zip auf einen Datenträger
► Öffne GetObject.xlsm
► Starte eins der beiden Makros

Klappt es damit (öffnet sich die Word-Datei)?


Angehängte Dateien
.zip   Getobject.zip (Größe: 21,9 KB / Downloads: 3)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#7
Jupp, ist leer, keine Anzeige von "Testdatei"!

Gruß
Roy
Top
#8
(25.03.2021, 09:28)RPP63 schrieb: Noch ein Versuch:
Ich habe meinen Test mal in ein Zip-Archiv gepackt.
► Entpacke GetObject.zip auf einen Datenträger
► Öffne GetObject.xlsm
► Starte eins der beiden Makros

Klappt es damit (öffnet sich die Word-Datei)?

Also, vielen Dank nochmal für die Mühe. Merkwürdigerweise funktioniert das jetzt mit Deiner Testdatei, sogar mit beiden Codes. Vielleicht ist meine Datei irgendwo defekt, vermute fast, dass es was mit der Serienbrieffunktion zu tun hat. Ich werde einfach mit dem funktinierendem Beispieldateien arbeiten.

Da nun beide Codes richtig starten, habe ich aber einen Unterschied festgestellt. Und zwar beim zweiten Code:

Code:
Sub StarteWord()
Dim objWordApp As Object
Dim strPfad As String
strPfad = ThisWorkbook.Path & "\Unterordner\Anschreiben1.docx"
Debug.Print Dir(strPfad)
Set objWordApp = CreateObject("Word.application")
With objWordApp
.Application.Visible = True
.Application.Documents.Open (strPfad)
End With
Set objWordApp = Nothing
End Sub

Hier kann man dann im geöffneten Dokument nicht die Serienbrieffunktion benutzen.

Beim Code 1 startet das Dokument und man kann die Serienbrieffunktion verwenden:

Code:
Sub Get_Word()
  Dim wdAnw As Object
  Dim wdDok As Object
  Set wdDok = GetObject(ThisWorkbook.Path & "\Unterordner\Anschreiben1.docx")
  Set wdAnw = wdDok.Parent
  wdAnw.Visible = True
  wdAnw.WindowState = 0 '0 = Normal; 1 = Maximized; 2 = Minimized
  wdAnw.Activate
  'wdDok.Close
  'wdAnw.Quit
  Set wdAnw = Nothing
  Set wdDok = Nothing
End Sub

Ok, das Ursprungsproblem ist gelöst. Schon mal vielen Dank dafür, wobei der Grund mir Schleierhaft ist.

Der o.g. Code fragt beim Öffnen des Worddokumentes immer ab, ob er die Daten aus Excel übernehmen darf. Diese Abfrage würde ich noch gern verhindern, gerade weil die manchmal im Hintergrund geöffnet wird und man erstmal dahin muß, um diese zu bestätigen.

Gruß
Roy

P.S. Ich habe mal die Testdatei mit Serienfunktion ergänzt und als Testdatei angehängt.


Angehängte Dateien
.zip   Temp.zip (Größe: 27,97 KB / Downloads: 1)
Top
#9
Habe jetzt versucht, neu anzufangen.

Gleiches Dokument genommen, was funktioniert hat und bearbeitet und gespeichert.

Jetzt verschiebe ich den Ordner und wenn ich nun das Dokument starte kommt neben der Abfrage, ob ich die Daten übernehmen will gleich ein weiteres Dialogfeld, wo ich die Datenquelle auswählen soll. Wenn ich das abbreche, öffnet zwar das Dokument, aber ich kann es nicht mit der Serienbrieffunktion bearbeiten.

Muß ich vielleicht einen ähnlichen Code in die Worddokumente schreiben?
Top
#10
Hallöchen,

bisschen hast Du es ja mit Deinen Ordnern. Am Anfang schriebst Du mal, dass die Excel- und die Word Datei im gleichen Ordner lägen. Dann kommen massenweise Smile Unterordner im Code vor .. Nun verschiebst Du einen Ordner - den mit der Excel und den Unterordnern oder wie machst Du das?

Ok, also, beim Serienbrief werden die Pfade absolut gespeichert. Wenn Du also bei gleicher Ordnerstruktur schon nur einen anderen Laufwerksbuchstaben hast, klappt's nicht. Du musst den Pfad anpassen Sad

Im Prinzip mit

ActiveDocument.MailMerge.OpenDataSource Name:="MeinLaufwerk:\Pfad\DateiName.Erweiterung"
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste