3.5k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo Zusammen,

Ich versuche mich gerade mal wieder mit VBA, komme aber gerade nicht mehr weiter und hoffe auf eure Hilfe.

Ich habe eine Exceldatei (Parent) welche Verlinkungen zu 2 anderen Dateien hat. Nun wollte ich, nach dem ich die Parent Datei öffne, dass die beiden anderen Dateien im Hintergrund geöffnet werden. Danach die Parent Datei aktualisiert, welche aus den beiden anderen gezogen wird. Im Anschluss sollen die beiden Dateien ungespeichert geschlossen werden.
Ich hatte vermutet dass dies keine sehr grosse VBA Herausforderung ist. Die automatische Öffnung und Schliessung funktioniert auch aber die Aktualisierung im Zwischenschritt klappt nicht.

Private Sub Workbook_Open()
Workbooks.Open "Helpfile1.xlsx"
Workbooks.Open "Helpfile2.xlsx"
ThisWorkbook("Parent.xlsm").Activate
ThisWorkbook.Worksheets("Daten").RefreshAll
Workbooks("Helpfile1.xlsx").Close False
Workbooks("Helpfile2").Close False
End Sub

Vorab schon mal vielen Dank für eure Vorschläge!
Frank

9 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Frank,

wenn du eine Datei öffnen willst, dann musst du den gesamten Pfad angeben.

Dein Makro müsste also ungefähr so aussehen (Pfad anpassen):
Private Sub Workbook_Open()
Workbooks.Open "C:\Test\Helpfile1.xlsx"
Workbooks.Open "C:\Test\Helpfile2.xlsx"
With ThisWorkbook
.Worksheets("Daten").RefreshAll
End With
Workbooks("Helpfile1.xlsx").Close (False)
Workbooks("Helpfile2.xlsx").Close (False)
End Sub

Oder falls die Helpfiles im gleichen Verzeichnis wie die Parent-Arbeitsmappe liegen:
Private Sub Workbook_Open()
Dim strPfad As String

strPfad = ThisWorkbook.Path
Workbooks.Open strPath & "\Helpfile1.xlsx"
Workbooks.Open strPath & "\Helpfile2.xlsx"
With ThisWorkbook
.Worksheets("Daten").RefreshAll
End With
Workbooks("Helpfile1.xlsx").Close (False)
Workbooks("Helpfile2.xlsx").Close (False)
End Sub

Gruß

M.O.
0 Punkte
Beantwortet von
Hi Mo,

vielen Dank für deinen Input.
Ich habe den Code auch soweit angepasst, allerdings erhalte ich die Laufzeitfehler 438 Meldung Objekt unterstützt diese Eigenschaft nicht...
Nun habe ich nachgelesen, was diesen Fehler hervorrufen könnte und es wurde darauf hingewiesen, dass dies durch AddIns verursacht wird.
Leider konnte ich auch nach punktueller Ausschaltung einzelner AddIns das Problem nicht beheben.

Habt Ihr hierzu Ideen?
Könnte es noch andere Ursachen geben als inkompatible AddIns?

Viele Grüsse
Frank
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Frank,

welche Zeile wird denn gelb markiert, wenn der Fehler kommt?

Und poste bitte auch mal deinen angepassten Code.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.

der eingegebene Code sieht wie folgt aus:

Private Sub Workbook_Open()
Workbooks.Open "M:\Marktplatz\Helpfile1.xlsx"
Workbooks.Open "M:\Marktplatz\Helpfile2.xlsx"
With ThisWorkbook
.Worksheets("Daten").RefreshAll
End With
Workbooks("Helpfile1.xlsx").Close False
Workbooks("Helpfile2.xlsx").Close False
End Sub

Die mittlere Zeile ab ". Worksheets("Daten")" wird gelb angeleuchtet.

Viele Grüsse
Frank
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Frank,

so funktioniert es:

Private Sub Workbook_Open()
Workbooks.Open "M:\Marktplatz\Helpfile1.xlsx"
Workbooks.Open "M:\Marktplatz\Helpfile2.xlsx"
ThisWorkbook.RefreshAll
Workbooks("Helpfile1.xlsx").Close False
Workbooks("Helpfile2.xlsx").Close False
End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.

herzlichen Dankf für deine Hilfe!
Das Öffnen und schliessen der Hilfdateien funktioniert nun perfekt.
Allerdings die Aktualisierung der Parent Datei klappt nicht ganz aber ich glaube dass dies nicht an dem VBA Code liegt.
In manchen Feldern steht noch #Wert obwohl in der Hilfsdatei der entsprechende Wert, aus welcher die Daten gezogen werden, vorhanden sind.
Nach einem Doppleklick auf das entsprechende Feld wird der Inhalt akualisiert und nun angezeigt.

Viele Grüsse
Frank
0 Punkte
Beantwortet von
Ich vermute das der Begriff Aktualisierung nicht ganz korrekt ist.
Viel mehr geht es um die Neuberechnung der Links zu den beiden Hilfsdateien.
Im Netz habe ich folgenden Code gefunden, da ich Ihn aber nicht ganz verstehe habe ich es noch nicht geschafft ihn auf mein Fall anzupassen:

ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources

Könnt ihr mir bitte hierzu noch Hinweise geben?
0 Punkte
Beantwortet von
Dies war mein heutiger Versuch, welcher allerdings ebenfalls mit einer Fehlermeldung der mittleren Codezeile beendet wurde...

Private Sub Workbook_Open()
Workbooks.Open "M:\Marktplatz\Hilfsfile1.xlsx"
Workbooks.Open "M:\Marktplatz\Hilfsfile2.xlsx"
ThisWorkbook.RefreshAll

Workbooks("Parentdatei.xlsm").UpdateLink Name:=Workbooks("Parentdatei.xlsm").LinkSources

Workbooks("Hilfsfile1.xlsx").Close False
Workbooks("Hilfsfile2.xlsx").Close False
End Sub
0 Punkte
Beantwortet von
Könnt Ihr mir hierzu bitte weiterhelfen?

Viele Grüsse
Frank
...