Workbook.open verhindern

Hallo zusammen.

Trotzdem I-Netsuche habe ich noch keine passende Lösung zu dem folgenden Problem gefunden:

Über eine Schleife öffne ich aus einer Übersichtstabelle nach einander verschiedene Exceldateien, welche alle ein workbook.open enthalten. Ich verwende zumeist

Workbooks.Open Filename:=„T:\Pfad\Datei.xlsm“, UpdateLinks:=False
manchmal aber auch

Workbooks.Open Filename:=„T:\Pfad\Datei.xlsm“, UpdateLinks:=False, Readonly:=True

Die Ausführung des workbook.open ist für unsere Arbeit wichtig, sodass wir darauf nicht verzichten können. Beim Auslesen der Inhalte der Dateien ist das Ausführen des workbook.open jedoch manchmal nicht notwendig. Daher meine Frage:

Besteht die Möglichkeit, durch Modifikation des Workbooks.Open das Starten des workbook.open zu verhinden? Ginge es alternativ irgendwie, ohne dass ich den Inahlt des workbook.open-Codes verändern muss? Wie ginge es, wenn ich den Inhalt verändern muss?

Vielen Dank schon mal und Grüße.

Grüezi kackei

Die Ausführung des workbook.open ist für unsere Arbeit
wichtig, sodass wir darauf nicht verzichten können. Beim
Auslesen der Inhalte der Dateien ist das Ausführen des
workbook.open jedoch manchmal nicht notwendig. Daher meine
Frage:

Besteht die Möglichkeit, durch Modifikation des Workbooks.Open
das Starten des workbook.open zu verhinden? Ginge es
alternativ irgendwie, ohne dass ich den Inahlt des
workbook.open-Codes verändern muss? Wie ginge es, wenn ich den
Inhalt verändern muss?

Du könntest die Inhalte auch per Formel auslesen, dann wird die Mappe nicht komplett geöffnet und das Workbook.Open() springt nicht an.

Die Formeln kannst Du mit VBA in die Zellen der aktiven Mappe schreiben lassen und anschliessend die Formeln durch die Werte ersetzen lassen.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas.

Du könntest die Inhalte auch per Formel auslesen, dann wird
die Mappe nicht komplett geöffnet und das Workbook.Open()
springt nicht an.

Die Formeln kannst Du mit VBA in die Zellen der aktiven Mappe
schreiben lassen und anschliessend die Formeln durch die Werte
ersetzen lassen.

Sei die Datei in folgendem Pfad: „T:\Pfad\Datei.xlsm“

Dann schreibe ich in meine Übersichtsdatei zum Beispiel einfach:

=‚T:\Pfad[Datei.xlsm]Uebersicht‘!$B$5

und erhalte ohne Öffnen der Datei den Wert? Das fänd ich komisch, aber ich habe sicher noch nicht alle Möglichkeiten von Excel ausprobiert.

Es gibt bei der Sache nur leider ein Problem: In einem zweiten Teil der Auswertung muss ich meine Dateien öffnen, um ein anderes Makro zu starten. Erst danach kann ich einen Wert auslesen. Es macht also an der Stelle dann doch Sinn, die Datei zu öffnen.

Danke aber trotzdem für den Hinweis. Wenn das funktioniert, hilft es mir an anderer Stelle sehr sehr weiter.

Grüße.

Grüezi kackei

Sei die Datei in folgendem Pfad: „T:\Pfad\Datei.xlsm“

Dann schreibe ich in meine Übersichtsdatei zum Beispiel
einfach:

=‚T:\Pfad[Datei.xlsm]Uebersicht‘!$B$5

und erhalte ohne Öffnen der Datei den Wert? Das fänd ich
komisch

Wieso ist das komisch?

Erstellst Du einen einfachen Zellbezug zu einer anderen Mappe und schliesst diese anschliessend wieder, dann steht genau das in der Zelle.

Daher kannst Du diese Formel auch per VBA in eine Zelle schreiben (lassen).

Ich habe so einen Code erstellt der mit beliebigen Parametern aufgerufen werden kann und Daten auf diese Weise importiert - das klappt ganz hervorragend und zuverlässig.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas.

Interessant ist das, wenn ich die Formel in eine Zelle schreiben kann, ohne, dass ich die entsprechende Datei vorher geöffnet habe. Kam mir ein wenig komisch vor, weil ich immer dachte, dass mindestens einmal die Excel geöffnet sein müsste, um die Daten auch wirklich zu übernehmen. Mir war schon bekannt, dass der gesamte Pfad dann in der Zelle steht, aber ohen vorher öffnen - sehr komisch / interessant.

Oh, inzwischen habe ich eine Lösung gefunden. Neben dem ausschalten von Makros geht - und für mich hier am geeignetsten

Application.EnableEvents = False
worksbooks.open
Application.EnableEvents = True
Dadurch wird das workbook.open nicht gestartet, ich kann hinterher aber per VBA einen anderes Prozess aufrufen. Feine Sache das.

Grüße.

Workbooks.Open Filename:=„T:\Pfad\Datei.xlsm“,
UpdateLinks:=False
manchmal aber auch

Hallo Kackei,

probiere mal:

Application.EnableEvents = False
Workbooks.Open Filename:=„T:\Pfad\Datei.xlsm“,UpdateLinks:=False
Application.EnableEvents = True

k.A. ob das klappt.

Gruß
Reinhard

Hallo Reinhard.

Workbooks.Open Filename:=„T:\Pfad\Datei.xlsm“,
UpdateLinks:=False
manchmal aber auch

Hallo Kackei,

probiere mal:

Application.EnableEvents = False
Workbooks.Open
Filename:=„T:\Pfad\Datei.xlsm“,UpdateLinks:=False
Application.EnableEvents = True

k.A. ob das klappt.

Es klappt genau so, wie ich es brauche.

Grüße.

Application.EnableEvents = False
Workbooks.Open
Filename:=„T:\Pfad\Datei.xlsm“,UpdateLinks:=False
Application.EnableEvents = True
k.A. ob das klappt.

Es klappt genau so, wie ich es brauche.

Hallo Kackei,

du bist mir zu schnell *grien* Ich bin da lahmer.
Als ich bei deiner Anfrage in den Antwortmodus ging bekam ich nicht
mit daß du schon „unten“ quasi das Gleiche sagtest.
Als ich das bemerkte wollte ich meine Antwort löschen da
nutzlos. Ging nicht du hattest schon geantwortet:smile:

Ein Hinweis dazu. Wundere dich nicht wenn es nicht funktioniert
und trotzdem Makros in der zu öffnenden Mappe ausgeführt werden.

Zum einen könnte da in einem Modul die „AutoExec“-Prozedur stehen,
wurde früher benutzt als es das Workbook_Open-Ereignis noch nicht gab.
Andererseits kann es durchaus auch an anderen Makros liegen die
du in der jeweiligen Mappe hast.

Genaues weiß ich da nicht, hatte noch keine Lust da nachzuforschen.
Ich kann dir nur sagen was ich genau weiß.
Wenn ich so Code teste der in einem Ordner alle xls-dateien nach der
Reihe öffnet um irgednwas zu tun dann will ich absolut nicht
daß da in der datei Makros starten.

Ergo versuche ich das mit Application.enableevents zu unterbinden.
Nehme ich dafür einen Ordner wo ich zig Mappen habe und lasse
meinen Code laufen sehe ich ja am Bildschirm daß da durchaus
in geschätzten 30 von 300 Mappen deren Codes anstarten.

Was willst du eigentlich genau machen?
In eine Mappe schreiben geht m.W. nur durch das Open was du kennst.
Auslesen geht schon ohne daß du die Mappe mit Open öffnest.
Aber das macht man nur bei einer oder wenigen Zellen.
Geht mit den alten Excel4-Befehlen die man nicht nur im Blatt
sondern auch in Vba benutzen kann.

Gruß
Reinhard

Hallo Reinhard.

Was willst du eigentlich genau machen?
In eine Mappe schreiben geht m.W. nur durch das Open was du
kennst.
Auslesen geht schon ohne daß du die Mappe mit Open öffnest.
Aber das macht man nur bei einer oder wenigen Zellen.
Geht mit den alten Excel4-Befehlen die man nicht nur im Blatt
sondern auch in Vba benutzen kann.

Vom Grundprinzip habe ich mehrere ähnliche Vorgänge. Zum Hintergrund: Wir haben Arbeitsdateien, die jeweils in Kundenordner liegen. Diese Dateien stehen mit dem Speicherpfad in einer Sammeldatei. Wir haben momentan zwei dieser Sammeldateien; im vorliegenden Fall kommt noch ein dritte Liste dazu, die ich temporär aus dem Ordnersystem auslese.

Ziel des Codes ist es eine Liste zu erstellen, die bestimmte Informationen enthält (dies ist davon abhängig, welche Liste wir erstellen - die Liste wiederum ist abhängig vom Hintergrund der Aussage der Liste). Ich gehe also durch die Sammeldati und öffne die Arbeitsdateien. Es gibt jetzt drei Möglichkeiten.

  1. Ich muss bestimmte Blätter aufrufen, die sich durch einen Zeitraum definieren oder
  2. Ich muss ein Makro aufrufen, damit Daten aktualisiert werden, welche vom aktuellen Datum abhängig sind und
  3. Ich lese nur Daten aus.

Für Punkt drei kann ich ja theoretisch durch die Kenntnis des Pfades die Formel zum Auslesen direkt in meine Ausgabeliste schreiben und hinterher durch copy - paste festschreiben. Werde ich demnächst mal machen, kommt aber eigentlich nur in einem Fall vor.

Puntke eins und zwei sind so die Standardvarianten. Nun ist es noch wichtig zu wissen, dass wir im workbook.open der Arbeitsdateien bereits für das Übersichtsblatt innerhalb der Arbeitsdatei einen Code gebastelt haben, der die Daten auf dem Übersichtsblatt aktualisiert. Das ist während der täglichen Arbeit gut und hilfreich, beim Erstellen der Listen jedoch unnötig. Hier sind andere Makros sinnvoll, die Aktualisierungen erzeugen. Da ich fast immer ein bestimmtes Blatt suchen muss, um Daten auszulesen bzw. eine Aktualisierung über einen Prozess erzeuge, muss ich also die Arbeitsdatei öffnen, brauche aber nicht das workbook.open.

Wir planen zwar eine Umgestaltung unserer Arbeitsdateien, die grundsätzliche Problematik wird aber bleiben, nur dass wir bei den neuen Arbeitsdateien innerhalb eines Registerblattes suchen müssen und nicht mehr mehrere Register durchsuchen müssen.

Das zum Hintergrund. An Mengen kommt es schon mal vor, dass wir bis zu 50 Daten aus einer Datei auslesen (im Extremfall), normal sind so 10 - 20 Daten. momentan sind es aber ca. 100 Arbeitsdateien, vor kurzem waren es jedoch auch schon an die 1.000 - und es könnten theoretisch noch sehr viel mehr werden.

Beim Probieren habe ich bisher nicht erkennen können, dass workbook.open unbeabsichtigt gestartet wurde. Und wenn es bei einer von 10 Dateien passiert, ist es nicht so schlimm - lediglich ein zeitliches „Problem“ - inhaltlich verändert sich durch das workbook.open nichts. Denn dafür sind ja die anderen Codes gedacht.

Grüße.