Discussion:
Bestimmte geöffnete Datei mit VBA auswählen und ohne zu speichern schließen
(zu alt für eine Antwort)
Walter
2006-02-21 07:52:34 UTC
Permalink
Hallo,

ich möchte gerne mit einer Masterdatei in einem Makro bestimmte
geöffnete Dateien auswählen und schließen. Ich habe es mit
Verzeichnis = Cells(1, 1)
Datei = Cells(2, 1)
Workbooks(Verzeichnis + Datei).close savechanges:=False
versucht. Leider vergeblich, weil Excel wohl selbst den Dateien
bestimmte Dateinummern gibt. Es kommt also die Fehlermeldung, dass der
Index außerhalb des gültigen Bereiches liegt.
Folgender Ablauf soll erreicht werden:
1. Die Masterdatei soll geladen werden. Beim Öffnen sollen auch
Sub-Dateien geöffnet werden, weil diese den Input für die Masterdatei
geben. -> Läuft bereits
2. Vor dem Schließen der Masterdatei sollen die Sub-Dateien
geschlossen werden - mittels Makro. -> Läuft leider nicht

Jetzt könnte man es natürlich mit den Indexnummern versuchen. Da ich
aber vor dem Öffnen der Masterdatei eventuell andere Dateien schon
geöffnet habe, weiß ich nicht welche Dateinummern die Sub-Dateien
haben. Eine mögliche Lösung wäre also, dass ich die Dateinummer der
Masterdatei heraus bekomme und somit auch die Nummern der Sub-Dateien
kenne (denn sie wurden ja automatisch mit der Masterdatei geöffnet).
Kennt jemand eine Lösung für mein (für mich großes) Problem?

Ich hoffe, dass meine Erklärungen waren verständlich! Wenn nicht,
dann fragt mich.

Gruß
Walter
stefan onken
2006-02-21 08:21:22 UTC
Permalink
Hallo Walter,
mE ergibt Verzeichnis + Datei keinen gültigen Dateinamen, daher kommt
dann auch der Fehler. Im Prinzip muss es heissen
Workbooks("Mappe1.xls").Close
bzw
Workbooks("Mappe1").Close
wenn die Datei noch nicht gespeichert wurde. Das Verzeichnis ist nicht
erforderlich.
Der Inhalt der Zelle A2 sollte also enthalten: mappe1.xls
dann sollte das Makro mit

Datei = Cells(2, 1)
Workbooks(Datei).close savechanges:=False

auch funktionieren. Evtl musst du vor Cells auch genauer angeben,
welche Cells du meinst, also zB
ThisWorkbook.Sheets("Tabelle1").Cells(2,1), denn ansonsten bezieht sich
Cells(2,1) auf die aktuell angezeigte Tabelle.

Gruß
stefan
Post by Walter
Hallo,
ich möchte gerne mit einer Masterdatei in einem Makro bestimmte
geöffnete Dateien auswählen und schließen. Ich habe es mit
Verzeichnis = Cells(1, 1)
Datei = Cells(2, 1)
Workbooks(Verzeichnis + Datei).close savechanges:=False
versucht. Leider vergeblich, weil Excel wohl selbst den Dateien
bestimmte Dateinummern gibt. Es kommt also die Fehlermeldung, dass der
Index außerhalb des gültigen Bereiches liegt.
1. Die Masterdatei soll geladen werden. Beim Öffnen sollen auch
Sub-Dateien geöffnet werden, weil diese den Input für die Masterdatei
geben. -> Läuft bereits
2. Vor dem Schließen der Masterdatei sollen die Sub-Dateien
geschlossen werden - mittels Makro. -> Läuft leider nicht
Jetzt könnte man es natürlich mit den Indexnummern versuchen. Da ich
aber vor dem Öffnen der Masterdatei eventuell andere Dateien schon
geöffnet habe, weiß ich nicht welche Dateinummern die Sub-Dateien
haben. Eine mögliche Lösung wäre also, dass ich die Dateinummer der
Masterdatei heraus bekomme und somit auch die Nummern der Sub-Dateien
kenne (denn sie wurden ja automatisch mit der Masterdatei geöffnet).
Kennt jemand eine Lösung für mein (für mich großes) Problem?
Ich hoffe, dass meine Erklärungen waren verständlich! Wenn nicht,
dann fragt mich.
Gruß
Walter
Walter
2006-02-21 08:41:01 UTC
Permalink
Hallo stefan,

das mit dem Verzeichnis und Dateiname funtioniert schon, aber leider
nicht mit dem Befehl Workbooks. Beim Öffnen der Datei mache ich es
auch so. Es werden Dateien geladen, deren Verzeichnis und Dateinamen
ich in Blattzellen definiert habe. Das Makro sieht dann so aus:
Private Sub workbook_open()
Application.ScreenUpdating = False
Sheets("Berichtsmonattabelle").Visible = True
Sheets("Berichtsmonattabelle").Select
'Plandatei1 öffnen
Verzeichnis1 = Cells(4, 7)
Datei1 = Cells(5, 7)
Workbooks.Open Filename:=Verzeichnis1 + Datei1, UpdateLinks:=0,
ReadOnly:=True
Windows("Auswertungen.xls").Activate
'Plandatei2 öffnen
Verzeichnis2 = Cells(6, 7)
Datei2 = Cells(7, 7)
Workbooks.Open Filename:=Verzeichnis2 + Datei2, UpdateLinks:=0,
ReadOnly:=True
Windows("Auswertungen.xls").Activate
'Plandatei3 öffnen
Verzeichnis3 = Cells(8, 7)
Datei3 = Cells(9, 7)
Workbooks.Open Filename:=Verzeichnis3 + Datei3, UpdateLinks:=0,
ReadOnly:=True
Excelfenster_maximieren
Windows("Auswertungen.xls").Activate
Sheets("Berichtsmonattabelle").Visible = False
Application.ScreenUpdating = True
End Sub

Das Problem ist also wirklich, wie kann ich die Sub-Dateien ansteuern,
um sie dann zu schließen?

Gruß
Walter
stefan onken
2006-02-21 09:21:45 UTC
Permalink
hallo Walter,
beim open-Befehl muss man den kompletten Pfad angeben (wenn die Datei
nicht im selben Verzeichnis ist), beim Close dagegen nicht. Um in Excel
geöffnete Dateien anzusprechen, reicht der Dateiname

Workbooks("mappe1.xls").Activate oder
Workbooks(Cells(2, 1)).Activate 'insofern cells(2,1) mappe1.xls
enthält

Workbooks("C:\mappe1.xls").Activate dagegen sorgt bei mir für eine
Fehlermeldung.
Gleiches gilt für den Close-Befehl.

Gruß
stefan
Post by Walter
Hallo stefan,
das mit dem Verzeichnis und Dateiname funtioniert schon, aber leider
nicht mit dem Befehl Workbooks. Beim Öffnen der Datei mache ich es
auch so. Es werden Dateien geladen, deren Verzeichnis und Dateinamen
Private Sub workbook_open()
Application.ScreenUpdating = False
Sheets("Berichtsmonattabelle").Visible = True
Sheets("Berichtsmonattabelle").Select
'Plandatei1 öffnen
Verzeichnis1 = Cells(4, 7)
Datei1 = Cells(5, 7)
Workbooks.Open Filename:=Verzeichnis1 + Datei1, UpdateLinks:=0,
ReadOnly:=True
Windows("Auswertungen.xls").Activate
'Plandatei2 öffnen
Verzeichnis2 = Cells(6, 7)
Datei2 = Cells(7, 7)
Workbooks.Open Filename:=Verzeichnis2 + Datei2, UpdateLinks:=0,
ReadOnly:=True
Windows("Auswertungen.xls").Activate
'Plandatei3 öffnen
Verzeichnis3 = Cells(8, 7)
Datei3 = Cells(9, 7)
Workbooks.Open Filename:=Verzeichnis3 + Datei3, UpdateLinks:=0,
ReadOnly:=True
Excelfenster_maximieren
Windows("Auswertungen.xls").Activate
Sheets("Berichtsmonattabelle").Visible = False
Application.ScreenUpdating = True
End Sub
Das Problem ist also wirklich, wie kann ich die Sub-Dateien ansteuern,
um sie dann zu schließen?
Gruß
Walter
Walter
2006-02-21 10:48:21 UTC
Permalink
Hallo Stefan,

vielen Dank - Es läuft mit deinen Angaben super!

Gruß
Walter

Loading...