Anzeige
Archiv - Navigation
1588to1592
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

falscher Code wird ausgeführt (ThisWorkbook)

falscher Code wird ausgeführt (ThisWorkbook)
16.11.2017 13:35:01
Burkhard
Hallo miteinander,
ich habe ein ähnliches Problem wie alex vor ein paar Jahren (https://www.herber.de/forum/archiv/1136to1140/1137165_Makro_auf_Arbeitsmappe_beschraenken.html#1137165), aber keine Lösung dazu.
Ich habe mehrere Excel-Dateien - beschränken wir uns mal auf DateiA und DateiB. Der VBA-Code in beiden Dateien ist zu 99% identisch.
Wenn beide Dateien geöffnet sind, kann es vorkommen, dass ich aus DateiA (über ein eigenes Menü) eine Funktion aufrufe, diese aber in DateiB ausgeführt wird. Dumm ist, dass dann die Daten in DateiB verwendet (und geändert!) werden. Ganz gemein ist das, wenn DateiB geschlossen wurde - Excel macht sie dann ganz ungeniert wieder auf und führt den Code dort aus.
Ich weiß, dass das mit ActiveWorkbook bzw. ThisWorkbook zu tun hat. Der Code wird in ThisWorkbook ausgeführt. Wie kann das aber noch einen Inhalt haben, wenn die Datei (DateiB) geschlossen ist? Wann wird ThisWorkbook überhaupt gesetzt?
Eigentlich müsste ich jetzt vor jeder Funktion, die über das Menü aufgerufen werden kann, ActiveWorkbook mit ThisWorkbook vergleichen und bei Ungleichheit ThisWorkbook (das falsche - die geschlossene DateiB) auf das richtige (DateiA, von der aus die Funktion gestartet wurde) sozusagen "umschalten". Geht das überhaupt? Wenn ja: wie? So etwas wie "Set ThisWorkbook = ActiveWorkbook" funktioniert ja nicht (verständlicherweise).

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: falscher Code wird ausgeführt (ThisWorkbook)
16.11.2017 13:46:45
Nepumuk
Hallo Burkhard,
Wann wird ThisWorkbook überhaupt gesetzt?
Das wird nicht gesetzt, das ist immer die Mappe in welcher sich der Code befindet der dieses Objekt benutzt.
Gruß
Nepumuk
AW: falscher Code wird ausgeführt (ThisWorkbook)
16.11.2017 13:58:58
Burkhard
Hallo Nepumuk,
nur zum Verständnis: wie kann es dann sein, dass ThisWorkbook auf eine geschlossene Datei zeigt?
Und wie kommt es, dass ThisWorkbook und ActiveWorkbook manchmal (nicht immer) unterschiedlich sind? Weil ich in DateiB etwas gemacht habe, wodurch Code ausgeführt wurde, und dann nach DateiA gewechselt habe, um dort einen Code auszuführen?
Wenn es so wäre, wäre mir die Logik dahinter ein bisschen unverständlich.
Anzeige
AW: falscher Code wird ausgeführt (ThisWorkbook)
16.11.2017 14:05:35
Nepumuk
Hallo Burkhard,
ThisWorkbook ist die Mappe in der sich der Code befindet, ActiveWorkbook ist die Mappe die im Vordergrund ist. ActiveWorkbook würde ich nur benutzen wenn es nicht mehr anders geht und das ist so gut wie nie der Fall.
ThisWorkbook kann nicht auf eine andere Datei "zeigen".
Aber ehrlich gesagt ist das ganze, ohne deine Mappen zu kennen, stochern im Nebel.
Gruß
Nepumuk
AW: falscher Code wird ausgeführt (ThisWorkbook)
16.11.2017 14:27:56
Burkhard
Hallo Nepumuk,
hier mal ein Ausschnitt von dem Menü-Code, der in DateiA zum Starten von Funktionen verwendet wird, z.B. "neue_Zeile". Der Code ist in DateiB identisch und wird in Workbook_Open aufgerufen.
Sub createMenue()
Dim objAktiveMenueLeiste As Object
Dim objMeinMenue As Object
Dim objBefehl As Object
Application.StatusBar = "creating add-in menues"
Set objAktiveMenueLeiste = CommandBars.ActiveMenuBar
If objAktiveMenueLeiste.FindControl(, , "eins") Is Nothing Then
Set objMeinMenue = objAktiveMenueLeiste.Controls.Add(Type:=msoControlPopup, Temporary:= _
True)
objMeinMenue.Caption = "&Group-Permission Macros"
objMeinMenue.Tag = "eins"
Set objBefehl = objMeinMenue.Controls.Add(Type:=msoControlButton)
With objBefehl
.Caption = "&1. Insert a new line with predefined cells content"
.FaceId = 2628
.Tag = "11"
.OnAction = "neue_Zeile"
End With
[...]
Diese "OnAction" wird in DateiA aufgerufen. Wieso wird sie in DateiB ausgeführt? Ist das logisch?
Aber viel wichtiger ist die Frage: wie kann ich sicherstellen, dass der Code in DateiA, also der Datei, in der er aufgerufen wurde, durchgeführt wird?
Anzeige
AW: falscher Code wird ausgeführt (ThisWorkbook)
16.11.2017 14:56:47
Nepumuk
Hallo Burkhard,
warum arbeitest du noch immer mit den alten Commandbars? Bei der OnAction-Eigenschaft hast du bei Namensgleichheit der Prozedur keine Chance zu bestimmen welche Prozedur aufgerufen wird.
Ich möchte dir dringend anraten auf XML umzusteigen. Irgendwann musst du das sowieso, wieso nicht heute? Und gib den Prozeduren unterschiedliche Namen, das macht sonst immer Probleme.
Gruß
Nepumuk
AW: falscher Code wird ausgeführt (ThisWorkbook)
16.11.2017 15:59:27
Burkhard
Hallo Nepumuk,
ich habe so um die 50 Excel-Dateien, die ich von meinem Vorgänger übernommen habe - Tendenz steigend. In allen läuft derselbe Code, der zentral gepflegt wird. Für jede Datei eindeutige Namen zu vergeben, ist damit nicht machbar.
Umstieg auf XML ist für mich in diesem Zusammenhang neu und wahrscheinlich unrealistisch, denn das geht vermutlich nicht grade mal so eben.
Habe ich mit Application.Run (nach festgestellter Ungleichheit) eine Chance? In der Excel Hilfe steht: Wenn eine Zeichenfolge verwendet wird, wird diese im Kontext des aktiven Blatts ausgewertet. Ich hab's ausprobiert, lande allerdings wieder im "falschen" ThisWorkbook ...
Anzeige
AW: falscher Code wird ausgeführt (ThisWorkbook)
16.11.2017 17:00:06
Luschi
Hallo Burkhard,

Ganz gemein ist das, wenn DateiB geschlossen wurde - Excel macht sie dann ganz ungeniert wieder auf und führt den Code dort aus.
Das liegt an der total luschig definierten Programmierung des CommandBar-Objektes im Vba-Code.
Bei mir sieht das so aus:
Set m_M_Hilfe = m_ML_NaVi.Controls.Add(Type:=msoControlPopup, Temporary:=True)
Wenn der Zusatz 'Temporary:=True' fehlt, dann ist dieser Commandbar-Eintrag im Menü fest und bleibt auch nach dem Schließen der jeweiligen Arbeitsmappe bestehen. Wird dieser Menüeintrag dann aktiviert, dann wird auch die dazugehörige Arbeitsmappe geöffnet, ist dann aber auch die aktive Arbeitsmappe und alle Daten beziehen sich auf diese AM.
Haben 2 oder mehrere AM den gleichen Vba-Code zum definieren der Commandbar-Einträge, dann gewinnt die 1. AM und die Einträge der 2. geöffneten AM bleiben auf der Strecke
Da wirst Du wohl mit dem Programmierer sprechen müssen, damit er diesen Mißstand (fehlender Zusatz) beseitigt.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: falscher Code wird ausgeführt (ThisWorkbook)
17.11.2017 09:37:28
Burkhard
Hallo Luschi,
im Post von gestern 14:05:35 steht ein Codeausschnitt. Da ist zu erkennen, dass die msoControlPopup durchaus ein Temporary:=True erhalten. Brauchen die msoControlButton auch so etwas?
Dass in allen Arbeitsmappen derselbe Code läuft, habe ich ja schon gesagt. Und da führt auch kein Weg dran vorbei.
Grüße
Burkhard
AW: falscher Code wird ausgeführt (ThisWorkbook)
17.11.2017 13:05:22
Luschi
Hallo Burkhard,
bei mir haben alle hinzugefügten Commandbar-Objekte diesen Zusatz, wenn es möglich ist.
Denn der bedeuted ja, wird die Arbeitsmappe geschlossen, ist das Hinzufgefügte vergessen und existiert auch nicht mehr.
Aber eigentlich ist es ja Wahnsinn, daß jede AM den gleichen Vba-Code enthalten muß. Dafür gibt es doch AddIns. Ändert sich ein Codestück, neue Funktionalitäten kommen hinzu, weil neue Forderungen anstehen oder sich doch ein Vba-Fehler eingeschlichen hat, dann macht es doch überhaupt keinen Spaß, in Dutzenden Dateien den Code nachzuziehen. Selbst dafür habe ich mir ein AddIn geschrieben, wenn mehrere AM den gleichen Code 1:1 haben sollen.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: falscher Code wird ausgeführt (ThisWorkbook)
20.11.2017 13:25:06
Burkhard
Hallo Luschi,
das Temporary:=True hat leider nicht geholfen. Ich ziehe nun ernsthaft in Erwägung, aus dem Code ein Add-In zu machen. Dann ist ja ThisWorkbook immer dasselbe, nämlich das des Add-Ins. Woher weiß die Anwendung aber, welche Daten sie verwenden soll, wenn mehrere Excel-Dateien (mit demselben geladenen Add-In) geöffnet sind? Ist das dann ActiveWorkbook? Wenn das nicht sichergestellt ist, bringt ein Add-In (bei allen unbestrittenen Vorteilen) nicht den entscheidenden Durchbruch ...
Grüße
Burkhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige