Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Bei Aktivierung einer Arbeitsmappe VBA ausführen
#1
Hallo, ich möchte erreichen, das wenn ich eine Arbeitsmappe schließe, und eine weitere geöffnete Arbeitsmappe auf aktiv setze, das ein VBA Code ausgeführt wird.

leider klappt das mit meinem Code nicht wenn ich die Arbeitsmappe schließe.  wenn ich jedoch den Code mit einem Button auf der aktiven Mappe ausführen lasse, dann geht es.


Call Dateinamen_umbenennen_Klicken
Kill (sDatei1)
Kill (sDatei2)
MsgBox "Fertig"

Range("A1").Select
ActiveWorkbook.Save
ActiveWorkbook.Close                                                 'hier wir die Arbeitsmappe geschlossen


Worksheets("Rechnungsversand").Activate                 'die im Hintergrund geöffnete Arbeitsmappe wird aktiviert

Call Offene_Rechnungen_Firmen_Klicken                      'jetzt soll der Code ausgeführt werden


mache ich da einen Denkfehler??

Lieben Gruß Frank
Antworten Top
#2
Lässt du den Code denn nicht in einem Eventmakro laufen? 

Beforeclose() 
Deaktivate() oder oder oder?


Zitat:Worksheets("Rechnungsversand").Activate                 'die im Hintergrund geöffnete Arbeitsmappe wird aktiviert
du aktivierst ein Arbeitsblatt in der offenen Datei und keine andere Mappe.  
Der Code läuft vermutlich in der eben noch ein bisschen offenen Mappe.  
das close() sollte ganz zuletzt stehen.
Antworten Top
#3
Nein, das löst das Problem leider nicht.
Antworten Top
#4
Hallöchen,

ralf_b meinte eventuell statt:

ActiveWorkbook.Close 'hier wir die Arbeitsmappe geschlossen
Worksheets("Rechnungsversand").Activate 'die im Hintergrund geöffnete Arbeitsmappe wird aktiviert
Call Offene_Rechnungen_Firmen_Klicken 'jetzt soll der Code ausgeführt werden

besser so

Worksheets("Rechnungsversand").Activate 'die im Hintergrund geöffnete Arbeitsmappe wird aktiviert
Call Offene_Rechnungen_Firmen_Klicken 'jetzt soll der Code ausgeführt werden
ThisWorkbook.Close 'hier wir die Arbeitsmappe geschlossen

Ich vermute, dass das Makro Offene_Rechnungen_Firmen_Klicken in der Datei mit dem Blatt Rechnungsversand steht?
Dann solltest Du die beiden Zeilen im Workbook_Activate von der Datei machen. Schlimmstenfalls kannst Du das unter der Bedingung machen, dass die andere Datei nicht offen ist. Ansonsten würde das ja auch laufen wenn Du mal nur die Datei mit dem Rechnungsversand öffnest.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#5
Hallo Frank, 19 

ein Makro in einer anderen Datei ruft man mit "Application.Run" auf - du musst sie nicht vorher aktivieren: 21 
Code:
Call Application.Run("'Makro_hier_ausfuehren.xlsb'!Modul1.Offene_Rechnungen_Firmen_Klicken")

Da müsste die Datei nichtmal offen sein - der Code öffnet sie bei Bedarf.

Die "einzelnen Anführungszeichen" sind drin, falls der Dateiname Leerzeichen enthält - stören aber auch nicht, wenn dem nicht so ist.

In meinem Beispiel ...

heisst die Datei "Makro_hier_ausfuehren.xlsb".
ist in "Modul1"
Makro heisst "Offene_Rechnungen_Firmen_Klicken"

Das "Modul1." muss man nicht unbedingt davor schreiben - nur, wenn du ein gleichlautendes Makro in z. B. dem Klassenmodul von Tabelle1 hast, dann heisst der Code zum aufrufen:
Code:
Call Application.Run("'Makro_hier_ausfuehren.xlsb'!Tabelle1.Offene_Rechnungen_Firmen_Klicken")

Du könntest so auch den Code eines "ActiveX CommandButton" aufrufen:
Code:
Call Application.Run("'Makro_hier_ausfuehren.xlsb'!Tabelle1.CommandButton1_Click")
________
Servus
Case
Antworten Top
#6
Das klappt leider alles nicht
Antworten Top
#7
Hallo Frank, 19 

bei mir klappt das einwandfrei. 05

.zip   Application_RUN_Makro_Code_in_anderer_Datei_aufrufen_auch_in_Tabellenblatt_und_CommandButton_CEF.zip (Größe: 25,97 KB / Downloads: 6)

Enpacke mal die beiden Dateien und teste damit.

Randbedingungen: 21 
Die Datei "Makro_hier_ausfuehren.xlsb" ist offen. Keine Probleme. Ist sie nicht offen, muss sie in einem Ordner sein, der in der "Windows Path-Umgebungsvariablen" drin ist (Windows Basiswissen 1. Klasse, 1. Woche, 1. Tag, 1. Stunde).
Sonst - und nur dann - musst du noch den Pfad mit angeben. Aber wie gesagt - nur wenn sie nicht offen ist.

Da sind jetzt alle drei Varianten drin.
________
Servus
Case
Antworten Top
#8
Hallo, 19 

hier jetzt auch mit Version Datei geschlossen: 21

.zip   Application_RUN_Makro_Code_in_anderer_Datei_aufrufen_auch_in_Tabellenblatt_und_CommandButton_CEF_1.zip (Größe: 29,38 KB / Downloads: 4)

Wenn Datei in anderem Ordner, dann einfach den kompletten Pfad angeben.
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • PIVPQ
Antworten Top
#9
Erst einmal, vielen, vielen Dank für eure Hilfe.

Ich habe es jetzt hinbekommen.

Der Fehler lag daran, das ich das Makro nicht richt angesteuert habe.

Die Lösung war:

Workbooks("Rechnungsversand Stammfirmen.xlsm").Worksheets("Rechnungsversand").Activate
Application.Run "'Rechnungsversand Stammfirmen.xlsm'!Offene_Rechnungen_Firmen_Klicken"


nochmals vielen Dank.
Gruß Frank
Antworten Top


Gehe zu:


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