Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1188to1192
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

Menue greift auf Code anderer Datei zu

Menue greift auf Code anderer Datei zu
Peter
Guten Tag
Ich habe verschiedene Arbeitsmappen mit nachfolgendem Code (in "DieseArbeitsmappe" resp. in einem Modul) für die Erstellung eines benutzerdefinierten Menues.
Wenn nur eine Mappe gleichzeitig offen ist, funktionieren die Befehle tadellos. Wenn ich jedoch eine zweite Datei öffne und dann die eine oder andere Position des selbst definierten Menues anwähle, wird der Code in der anderen Datei - welche den selben Code hat, ausgeführt.
Ich bin davon ausgegangen, dass dies dadurch verhindert wird, dass beim verlassen der Arbeitspappe das entsprechende Menue gelöscht wird und dann aufgrund der Aktivierung der neuen Datei ein neues (halt gleiches) Menue wieder erstellt wird.
Was muss ich zusätzlich machen, dass beim Anwählen eines Makros nicht dasjenige aus der anderen Datei ausgeführt wird?
Danke für eine Antwort.
Gruss, Peter
------------------------------------------------
CODE in „DieseArbeitsmappe"
------------------------------------------------
Option Explicit

Private Sub Workbook_Activate()
Menue_Erstellen
End Sub
Private Sub Workbook_Deactivate()
Menue_Loeschen
End Sub

--------------------------------------------------
CODE in Modul
--------------------------------------------------
Option Explicit
Const MenueName = "&Datenaufbereitung"
Const Befehl1 = "&01. Import"
Const Befehl2 = "&02. Check"
Sub Menue_Erstellen()
Dim MB As Object, MeinMenue As Object, Befehl As Object
Call Menue_Loeschen
Set MB = CommandBars.ActiveMenuBar
Set MeinMenue = MB.Controls.Add(Type:=msoControlPopup, Temporary:=True)
MeinMenue.Caption = MenueName
Set Befehl = MeinMenue.Controls.Add(Type:=msoControlButton, ID:=1)
With Befehl
.Caption = Befehl1
.OnAction = "Machwas1"
End With
Set Befehl = MeinMenue.Controls.Add(Type:=msoControlButton, ID:=1)
With Befehl
.Caption = Befehl2
.OnAction = "Machwas2"
End With
End Sub
Sub Menue_Loeschen()
On Error Resume Next
CommandBars.ActiveMenuBar.Controls(MenueName).Delete
Err.Number = 0
End Sub
Sub Machwas1()
Call DatenEintragen
End Sub
Sub Machwas2()
Call Kontrollrechnung
End Sub
Projekt Namen geben, den davor mit Pkt! orT
03.12.2010 16:26:23
Luc:-?
Gruß Luc :-?
AW: Projekt Namen geben, den davor mit Pkt! orT
03.12.2010 17:28:42
Peter
Hallo Luc:-?
mit deiner knappen Antwort hast du meine Fähigkeiten überschätzt. Könntest du deine Antwort etwas konkreter ausführen?
Danke und Gruss, Peter
Statt 'DieseArbeitsmappe' einen eindeutigen...
03.12.2010 21:02:37
Luc:-?
…Namen vergeben, Peter,
d.h. an dessen Stelle im Eigenschaftenfenster des VBE eintragen. Anschließend kannst du alle Elemente deines Projekts dem als Eigenschaft zuordnen — wie üblich mit Punkt; also bspweise schreiben… MyWBook1.Menü_Erstellen oder falls du lieber mit Run arbeiten willst, sollte auch Run "DateiXYZ!Menü_Erstellen" fktionieren. Schau mal, was im Makroassistenten steht, wenn du mehrere Mappen mit gleichnamigen Subroutinen offen hast… ;-)
Gruß + schöZwAdWE, Luc :-?
Anzeige
AW: Statt 'DieseArbeitsmappe' einen eindeutigen...
03.12.2010 22:32:41
Peter
Hallo Luc
Danke für die Erläuterung.
Allerdings ist das Problem folgendes:
Ich erstelle eine xls-Datei als Template, in welchem verschiedener Code ist und die den Code für die Menueerstellung enthält.
Dann wird dieses Template von anderen Benutzern mehrmals geöffnet und unter verschiedenen Namen abgespeichert. Teilweise werden dann Dateien die auf dem gleichen Template basieren gleichzeitig geöffnet. Jetzt müsste ich ja in den einzelnen erstellten Arbeitsmappen im VBE Eigenschaftsfenstert einen anderen Namen für "DieseArbeitsmappe" eintragen. Das ist aber nicht möglich resp. nicht praktikabel. Gibt es nicht eine andere Möglichkeit, damit gewährleistet ist, dass ein Code-Aufruf mittels selbstdefiniertem Menue immer nur in der aktiven Datei bearbeitet wird?
Gruss, Peter
https://www.herber.de/bbs/user/72576.xls
Anzeige
Tja, dann hast du die falsche Form gewählt,...
04.12.2010 02:23:24
Luc:-?
…Peter,
ein Template mit vielen Derivat-Dateien unbekannten Namens und alle haben die Makros aus der Vorlagedatei…?! Sehr bedenklich! Schreib ein AddIn, auf das dann alle zugreifen müssen. Da ist dann jedes Pgm nur 1x da und du musst nur noch sicherstellen, dass es mit der jeweils aktiven Datei arbeitet. Das dürfte kein Problem sein, wenn jeder sein eigenes AddIn hat. Im Netzwerk musst du es halt ausprobieren…
Gruß Luc :-?
AW: Tja, dann hast du die falsche Form gewählt,...
04.12.2010 08:28:11
Peter
Hallo Luc
Ich vermute, dass die Problemstellung noch nicht ganz klar ist.
Im letzten Beitrag habe ich eine Beispieldatei hochgeladen.
https://www.herber.de/bbs/user/72576.xls
Wenn diese Datei aufgestartet wird, wird ein benutzerdefiniertes Menue erstellt. Mit diesem Menue werden Codes angewählt, die in dieser Datei 72576.xls laufen sollen.
Wenn ich jetzt diese Datei mehrmals abspeichere, z.B. als 72576a.xls, 72576b.xls, 72576c.xls, 72576d.xls und 72576e.xls wird jedesmal beim Aufstarten das Menue erstellt. Wenn alle gleichzeitig geöffnet sind (in der gleichen Excel-Instanz) und ich von der einen zur anderen Datei wechsle, dann wird beim Verlassen der einen Datei das Menue gelöscht und beim Aktivieren der anderen Datei das Menue wieder erstellt.
Nun kommt es gelegentlich vor (mir ist noch nicht ganz klar, wann das jeweils der Fall ist) wenn mehr als eine dieser Dateien offen ist, dass ich beispielsweise im Menue der Datei 72576b.xls eine bestimmte Menueposition wähle und der entsprechende code dann in der Datei 72576a ausgeführt wird. - Mit anderen Worten: beim Anwählen eines Codes in der Datei x soll immer Code in der Datei x aufgerufen werden und nur Änderungen in der Datei x erfolgen.
Gruss, Peter
Anzeige
AW: Tja, dann hast du die falsche Form gewählt,...
04.12.2010 09:20:39
Tino
Hallo,
kann es zwar nicht feststellen, dass der Code in der anderen Mappe ausgelöst wird,
Du kannst aber mal versuchen den Code in der aktiven Datei anzusprechen.
In etwa so.
.OnAction = ThisWorkbook.Name & "!Machwas1"

und
.OnAction = ThisWorkbook.Name & "!Machwas2"
Gruß Tino
AW: Tja, dann hast du die falsche Form gewählt,...
05.12.2010 21:16:22
Peter
Hallo Tino
Danke für die Antwort. Ich muss nochmals genau beobachten, wann der Code in der anderen Mappe ausgelöst wird und dann werde ich dies als Beispiel nochmals posten.
Nicht ganz klar ist mir, auf was sich der Punkt vor OnAction bezieht.
Was muss da in der vorigen Zeile nach With ... genau stehen?
Danke und Gruss, Peter
Anzeige
AW: Tja, dann hast du die falsche Form gewählt,...
06.12.2010 13:54:35
Tino
Hallo,
verstehe nicht, den Code hast Du doch schon?
Du sollst ja nur die Zeile OnAction... wie im Bsp. erweitern,
damit explizit das Makro in der Datei ausführt wird wo der Code läuft (muss nicht die aktive sein).
Wenn der Code der gerade aktiven Datei ausgeführt werden soll, versuche es mal mit
.OnAction = ActiveWorkbook.Name & "!Machwas1"
Gruß Tino
AW: Tja, dann hast du die falsche Form gewählt,...
06.12.2010 14:01:52
Peter
Hallo Tino
Alles klar - ich habe da eine Fehlüberlegung angestellt.
Vielen Dank!
Gruss, Peter

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige