Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1064to1068
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Workbook_Open oder Einbinden?

Workbook_Open oder Einbinden?
Werner
mein VBA-Level: befriedigend
Hallo Freunde,
derzeit doktere ich, etwas verzweifelt, an dem Problem herum, wie ich auf ein
über Workbook_Open von einer xls-Datei geöffnetes AddIn, d.h. ein nicht installiertes AddIn, das aber gleichwohl die Eigenschaften einer .xla-Datei hat, in der Praxis zugreifen soll.
Zum Hintergrund siehe den Thread: https://www.herber.de/forum/messages/1064144.html
Ich eröffne hier einen neuen Thread, weil es jetzt um die spezielle Frage, wie man Dateien in andere einbindet, geht.
Luschi hatte mir in genanntem Thread erklärt, sie installiere AddIns, die nur von einigen, nicht von allen .xls-Dateien verwendet werden, grundsätzlich nicht, sondern öffne sie im Workbook_Open-Ereignis der jeweiligen Hauptatei und schließe sie
dann im Workbook_BeforeClose-Ereignis der gleichen Datei. Diese Methode hat auch bei mir wunderbar geklappt. Doch dann tauchte die Frage auf, wie ich danach in der Hauptdatei die Makros des so geöffneten AddIns anspreche. Ich bekomme dann immer die Meldung, der Makro-Name sei nicht bekannt. (Wohlgemerkt, es handelt sich zwar um ein AddIn, aber um ein nicht installiertes, gleichwohl auf die opben beschriebene Weise geöffnetes.)
Da lag die Idee nahe, das bereits geöffnete AddIn über den Excel-Editor (VBE) einzubinden. Auch
das hat funktioniert. Wenn das AddIn so in die Hauptdatei eingebunden ist, kann man über dessen
Codenamen mit nachgestelltem Punkt (z.B. "Ers.") plus Makroname auf die Makros dieses AddIns zugreifen.
Doch wenn ich anschließend, wie von Luschi vorgeschlagen, die Hauptdatei schließe,
veranlasst diese im Workbook_BeforeClose-Ereignis zuerst das Schliessen des AddIns. Excel stellt dann
natürlich fest, dass das nicht geht, weil das AddIn ja noch in Gebrauch sei. Es ist offenbar noch bei der Hauptdatei, wo ich es ja selbst im Excel-Editor eingebunden hatte. Die richtige Reihenfolge wäre also: zunächst die Hauptdatei erst danach das AddIn schließen.
Fazit: Es scheint also gar nicht möglich, ein solches AddIn im Worksheet_BeforeClose-Ereignis zu
schließen, weil es ja noch von der Hauptdatei benutzt wird, solange diese geöffnet ist.
Damit beginnt bei mir alles wieder von vorne: Wie rufe ich ein solches nicht installiertes AddIn auf, und
zwar so, dass ich auf dessen Makros auch zugreifen kann, und wie lasse ich es dann beim Schließen der Hauptdatei mit schließen, und zwar derart, dass in dieser Zeit am AddIn erfolgte Änderungen dort mit gespeichert werden?
Die AddIn-Problematik ist, wie dieses Beispiel zeigt, z.T. komplizierter als es auf den ersten Blick scheint.
Weiß jemand Rat? Besten Dank! Werner R.
AW: Workbook_Open oder Einbinden?
Tino
Hallo,
warum bindest Du diese nicht über Verweise ein,
dann brauchst Du dir darum keine Gedanken machen.
Ein weiterer Vorteil, Du kannst die Makros mit Call … rufen und brauchst nicht den Umweg über …Run zu machen.
Gruß Tino
Verweise?
Werner
Hallo Tino!
"Verweise", über den Excel-Editor (VBE)? Ich habe nichtdeutsches Excel und überlege gerade, was
"Verweis" hier bedeutet.
Werner R.
AW: Verweise?
Tino
Hallo,
warum hast Du eine englische Version wenn Du kein Englisch kannst. ;-) (ist ein Scherz)
Weis jetzt auch nicht bin nicht besonders gut in Englisch, schau mal nach Reprimande oder so.
Gruß Tino
Gruß Tino
Anzeige
eher vielleicht reproofs oT.
Tino
Erläuterung
Werner
Hallo Tino,
nein, es handelt sich um eine taiwanchinesische Version. Ich gehöre zu den außereuropäischen Forumsteilnehmern, von denen es auch eine Reihe gibt. Im allgemeinen komme ich aber
mit deutschen Anleitungen aus diesem Forum, deutschen Excel-Büchern usw. trotzdem gut zurecht, wenn der Zusammenhang klar ist. So konnte ich deine bisherigen Ausführungen zu AddIns ganz gut verstehen und auch umsetzen.
Wenn aber ein Begriff wie "Verweis" in deutschen Fachbüchern wie von Schels, Monika Weber usw.
nicht auftaucht oder dort nicht erklaert ist, kann ich manchmal damit nichts anfangen. Wahrscheinlich meinst du mit "Verweis" das, was ich als "Einbinden" oder "Referenzieren" bezeichnet habe. Stimmts?
Wenn dem so ist, bleibt aber das in diesem Thread anfangs dargestellte Problem: Ich kann das AddIn
nicht über den Code der Hauptdatei abspeichern lassen, wenn sich sein Inhalt geändert hat.
Beste Grüße! Werner R.
Grüße! Werner R.
Anzeige
Frage offen
Tino
Hallo,
ich kann Dir nicht mehr folgen und verstehe auch nicht was Du bezwecken willst.
Wenn ich ein Addin über Extras – Verweise einbinde, kann ich in meiner Datei alles wie zuvor auch machen dazu gehört auch das abspeichern.
Das mit der Version war ein Scherz, also nicht ernst gemeint.
Ich lass die Frage offen.
Gruß Tino
Das Prinzip ist ganz einfach
Werner
Hallo Tino,
was ich bezwecke, hatte ich in dem anderen Thread, auf den ich zu Anfang dieses Thread einen Link
gesetzt habe, ausführlich erläutert.
Noch einmal in Kürze: Ich will eine Datei, die nur Makros enthält, an mehrere Dateien, nennen wir sie Arbeitsdateien, anbinden. Luschi meinte, sie mache das, indem sie diese Makrodatei im Workbook_Open-Ereignis aller dieser Dateien öffnet und dann im Workbook_BeforeClose-Ereignis dieser Dateien schließt.
Nur konnte ich sie nicht fragen, wie sie die Makros dann in der jeweiligen Arbeitsdatei aufruft. Wohl nicht durch Verweise!
Wenn ich stattdessen Verweise verwende, brauche ich die Datei mit den Makros offenbar nicht in das
Workbook-Ereignis der jeweiligen Arbeitsdatei zu legen.
Während ich die jeweilige Arbeitsdatei bearbeite, ändere ich manchmal auch die Makrodatei. Diese
soll beim Schließen der Arbeitsdatei mit abgespeichert werden. Da aber ein Verweis von der Arbeitsdatei auf die Makrodatei gelegt ist geht das nicht. (Habe ich oben zu Beginn des Threads alles erläutert,
bitte nur den Ausdruck "Einbinden" oder "Referenzieren" durch "Verweis" ersetzen.)
Grüße! Werner R.
Anzeige
andere dürfen auch mitmachen.
Tino
Hallo,
wie gesagt ich würde dies über Extras Verweise machen,
dadurch kannst Du Dir dass mit dem Open und Close ersparen.
Letztendlich ist es aber Deine Sache wie Du es machst.
PS: setze bei "Frage noch offen" das Häkchen, damit sich andere auch beteiligen können
die eventuell mehr wissen haben.
Gruß Tino
Natuerlich!
Werner
Hallo Tino,
probiere es auf jeden Fall aus. Herzlichen Dank! Dein Vorschlag erscheint mir bei näherer Überlegung
auch einfacher als der von Luschi. Offen ist jetzt aber noch die Frage nach dem Abspeichern, siehe oben in diesem Thread. Grüße Werner R.
Anzeige
Referenz auf Addin
Nepumuk
Hallo Werner,
wo liegt jetzt eigentlich das Problem? Das Addin beim Schließen der Hauptmappe zu speichern ist keines. Das Addin mit der Hauprtmappe zu schließen ein kleines bis mittleres.
Gruß
Nepumuk
AW: Referenz auf Addin
Werner
Hallo Nepumuk,
speichern ist kein Problem, hast du recht. Ich kann es natürlich manuell schliessen. Angestrebt ist aber neben dem Speichern ein Schliessen des AddIns automatisch mit VBA aus der Hauptdatei heraus, sobald diese geschlossen wird. Dazu bräuchte ich eine Art
"Workbook_AfterClose-Ereignis", es gibt aber nur ein "Workbook_BeforeClose"-Ereignis. Da liegt das Problem! Grüße Werner R.
Anzeige
für was soll das gut sein?
Tino
Hallo,
für was soll das denn gut sein, dass Addin wird doch geschlossen wenn Du die Applikation beendest.
Gruß Tino
Speicherplatz sparen
Werner
Hallo Tino,
stimmt, nur habe ich manchmal noch andere Dateien offen und hätte gerne die Dateien geschlossen,
die nicht gebraucht werden. Dein Vorschlag ist aber immerhin schon eine akzeptable Lösung. Nur sind meine
AddIns z.T. recht umfangreich und belegen Speicherplatz. Da denkt man sich natürlich, wenn die
Hauptdatei geschlossen wird, sollten damit gleichzeitig auch deren Anhängsel geschlossen werden.
Jedenfalls löst dein Vorschlag das wichtige Speicherproblem! Vielen Dank!! Werner R.
P.S.: Meine Frage ist damit nur noch "halboffen".
Anzeige
@Nepumuck, wollte speicher sparen. ;-)
Tino
Hallo,
nein mein Englisch ist nicht so besonders, es reicht aber um mich durchs Leben zu schlagen. ;-)
Gruß Tino
Etwas verwirrend...
Werner
Hallo Nepumuk,
sind die Makros in dieser Datei korrekt? Aufgerufen wird "Call SaveMe", im Modul1 steht aber
"Public Sub SaveAddIn"? Verstehe ich nicht ganz. Und dann kommt "CloseMe"? SaveMe als reserviertes
Wort?
Werner R.
AW: Etwas verwirrend...
Tino
Hallo,
mach bei
Private Sub Workbook_BeforeClose(Cancel As Boolean)
in der Exceldatei einen Haltepunkt und gehe mit F8 schrittweise den Code durch,
dann kannst Du erkennen und nachvollziehen was passiert.
Gruß Tino
Anzeige
AW: Etwas verwirrend...
Nepumuk
Hallo Werner,
ja ok, ich hätte die Routine im Addin "SaveMe" auch direkt anspringen können. War nur als Demo gedacht wie Routinen eines referenzierten Addins direkt aufgerufen werden können. Also ohne Application.Run wie es sonst gemacht werden muss.
Die Routine "CloseMe" muss in einem Standarmodul stehen, da sie über die OnTime-Methode aufgerufen wird. Da gehötr natürlich noch eine Fehlerbehandlung rein. Wenn du nämlich eine Zweite Mappe offen hast, welche auch einen Verweis auf das Addin enthält, würdest du einen Fehler erzeugen.
Aber sonst ist das Prinzip klar? In Close-Event der Hauptmappe wird das schließen des Addins aufgerufen.
Gruß
Nepumuk
Anzeige
Besten Dank!
Werner
Hallo Nepumuk, hallo Tino,
vielen Dank an euch beide. Ich gehe Nepumuks Prozedur, wie von Tino vorgeschlagen, mal schrittweise
durch.
Schaffe ich heute nicht mehr, bin in meiner Zeitzone gegenber euch sieben Stunden voraus, bitte
um Verstaendnis. In der Morgenstund des morgigen Sonntag wird wohl manches Problem noch klarer werden.
Habe durch diesen Thread sehr viel gelernt, obwohl noch nicht alles verdaut! Beste Gruesse
Werner R.
Makro laeuft nicht...
Werner
Hallo Nepumuk,
habe den Code getestet, mit Haltepunkt. Er läuft nicht. Excel teilt in der Zeile "Call SaveMe" mit, dass es
das Projekt nicht findet. Hast du diese Makros wirklich getestet? Werner R.
Anzeige
AW: Makro laeuft nicht...
Nepumuk
Hallo Werner,
JA, mehrfach !!! Allerdings nicht unter Excel 2007, aber das sollte keine Rolle spielen.
Gruß
Nepumuk
Ich nehme erst mal die Zwischenloesung
Werner
Hallo Nepumuk,
rätselhaft! Aber das gibt es ja öfter, das etwas auf einem Computer läuft, auf dem anderen nicht.
Habe die Datei einfach übertragen, den Haltepunkt ganz an den Anfang gesetzt und dann deine
Datei geschlossen, um das Ereignis auszulösen.
Ich verwende jetzt einfach mal zunächst Tinos urspruengl. Lösung, die das Problem ja teilweise löst.
Vielleicht komme ich auch selbst noch durch logisches Denken und Herumprobieren weiter.
Herzl. Dank f. eure Geduld in diesem Thread!! Werner R.
läuft auch unter xl2007 ohne Probleme oT.
Tino
Alles OK!
Werner
Hallo Nepumuk,
nun habe ich deinen Makro doch noch zum Laufen gebracht. Er ist nicht nur gut, sondern ausgezeichnet!
Denn im BeforeClose-Ereignis wird das Programm durch "Application.Ontime" so an die Applikation
übergeben, dass es erst nach dem Schliessen der Datei, die das "BeforeClose"-Ereignis enthält, ausgeführt
wird. Damit wird gewissermaßen eine Art "AfterClose"-Ereignis simuliert. Das Ganze ist mir erst nach
einigem Nachdenken klar geworden.
Es funktioniert auch, wenn man mehr als ein Programm mit "Application.Ontime" übergibt, nur muss man dann die Zeitwerte etwas größer wählen, damit sich die Programme nicht gegenseitig ins Gehege kommen.
Nochmals Dank f. diesen Vorschlag. Konnte wegen zwischenzeitlicher Hardware-Reparatur erst jetzt antworten.
Grüße Werner R.
AW: Speicherplatz sparen
Tino
Hallo,
am einfachsten ist es Du öffnest die Excel als eigenständige Applikation.
z. Bsp. über eine Verknüpfung.
Beispiel für die Verknüpfung.
"C:\Programme\Microsoft Office\Office\EXCEL.EXE" "J:\Mappe.xls"
Für "J:\Mappe.xls" trägst Du Deine Datei ein.
Öffnest Du jetzt die Excel über diese Verknüpfung, wird diese als eigenständige Instanz geöffnet.
Gruß Tino
OK
Werner
Hallo Tino,
das verstehe ich nicht. Liegt aber wohl an mir. Ich bleibe einfach bei deinem vorhergehenden Vorschlag,
den ich immerhin klar genug verstanden habe, um ihn praktisch anzuwenden. Den zusaetzlichen Speicherplatz nehme ich eben in Kauf.
Nochmals besten Dank, die Diskussion war f. mich und euch kompliziert, aber jedenfalls bin ich einen
wichtigen Schritt weiter!
Gruesse! Werner R.
AW: Natuerlich!
Tino
Hallo,
was möchtest Du speichern, dass habe ich noch nicht so ganz verstanden.
Willst Du Änderungen am Addin speichern?
Mach im Addin einfach

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Save
End Sub


Vorsicht,
dies funktioniert aber nur in der ersten Excelinstanz, die dieses Addin verwendet.
Öffnest Du eine zweite Instanz, wird dieses Addin Schreibgeschützt geöffnet und somit kannst Du nur von der ersten aus auch speichern.
Andere Speichervorgänge in Deiner eigentlichen Datei bleiben eigentlich wie gehabt.
Gruß Tino

automatisches Schließen - Hase im Pfeffer
Werner
Hallo Tino, hallo Nepumuk
natürlich geht das so, aber nur manuell. D.h. auch wenn ich deinen Code (Tino) eingebe, muss ich das
AddIn ja noch schließen. Ich will das aber automatisch machen, nicht manuell, wie in meiner jüngsten
Antwort auf Nepumuks Frage in diesem Thread. Frage an euch beide: Wie mache ich das? Grüße, Dank f. eure Geduld! Werner R.
wie im anderen Trade gezeigt.
Tino
Hallo,
in dem Du es wie im anderen Trade machst,
über VBA den Verweis einbinden und auch wieder löschen.
Der größte Nachteil ist, dem Zugriff auf VBA Projekte muss vertraut werden,
also ungeeignet für die Weitergabe.
Gruß Tino
Wie lautet die VBA-Anweisung?
Werner
Hallo Tino,
OK, AddIn per VBA einbinden. Doch dazu finde ich nichts in meinen Buechern. Wie lautet die Anweisung,
"reference" oder ähnlich? Ich glaube, damit ist das Problem zu lösen. Werner R.
schau im anderen Trade oT.
Tino
Thread ;-) oT.
Tino
Korrektur
Werner
An alle:
Sorry, habe vergessen "Frage noch offen" anzukreuzen. Werner R.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige