in der folgenden Procedur wird durch SaveAs (aber auch durch manuelles Speichern unter..) das Change-Ereignis ausgelöst und überschreibt vorhandene Eingaben. Und dies trotz EnableEvents = false. Irgend jemand einen Tipp?
Rolf
in der folgenden Procedur wird durch SaveAs (aber auch durch manuelles Speichern unter..) das Change-Ereignis ausgelöst und überschreibt vorhandene Eingaben. Und dies trotz EnableEvents = false. Irgend jemand einen Tipp?
Rolf
bist Du sicher, dass die ComboBox6_Change-Ereignisroutine durch dem Code von Speichern_Click() ausgelöst wird?
Durch EnableEvents = False ist eigentlich sichergestellt, das Workbook_BeforeSave() nicht aufgerufen wird. Ggf. dort enthaltener Code, kann also nicht die Ursache sein.
Gibt es vielleicht Code, der unmittelbar nach Betätigen des Speicher-Buttons durchlaufen wird und die Änderung bewirkt?
Laß den Code im Bereich der kritischen Passage doch mal im Einzelschritt-Modus laufen.
Gruß
Axel
genau das habe ich auch getan, im Einzelschrittmodus durch. Ich traute meinen Augen ja auch nicht, aber wie bereits gesagt, sowohl durch die Procedur als auch durch das manuelle Speichern unter wird die Ereignisprocedur ausgelöst.
Rolf
direkt nach SaveAs wird das Change-Ereignis für die ComboBox ausgelöst?
Wirklich seltsam.
Wenn Du willst, schick mir die Datei mal zu.
Gruß
Axel
Email: wildspitze@gmx.de
schön, dass Du mir die Datei zugeschickt hast.
Das war ja ganz schön tricky - aber ich habe das Problem gefunden.
M.E. kann man das schon als Bug bezeichnen.
Also:
Wenn einem in einer Tabelle eingebettetem Steuerelement über die ListFillRange ein Zellbezug mit expliziter Angabe der
Tabelle zugeordnet wird und es in der Mappe in irgendeiner Tabelle eine Verknüpfung mit einer expliziten Tabellenangabe gibt, dann wird beim Speichern über SaveAs das Change()-Ereignis des Steuerelementes ausgelöst.
Nochmals gaaanz langsam, da hier einige Voraussetzungen gleichzeitig erfüllt sein müssen
1. Die ListFillRange-Eigenschaft des Steuerelementes ist gesetzt, Beispiel ListFillRange = Tabelle1!A1:A3
oder - wie in Deinem Fall - über einen benannten Bereich (der sich aber explizit auf eine Tabelle bezieht, hier PMASCH als
Konstante!G2:G7)
2. Es gibt in irgendeiner Zelle der Mappe mindestens eine Verknüpfung der Form A1=Tabelle1!B1. Davon existieren in Deiner
Mappe wahrlich genug.
3. Die Application.Calculation-Eigenschaft steht entweder auf xlCalculationAutomatic oder auf xlCalculationManual und
gleichzeitig ist (nur in letztem Fall) Application.CalculateBeforeSave auf True gesetzt.
Die Berechnungsmethode kann auch über Extras -> Optionen -> Berechnung eingestellt werden.
Weitere Hinweise:
Es trifft nicht nur das Change-Ereignis ein. Sind andere Ereignisroutinen für das Steuerelement definiert (z.B. Click) dann tritt dieses ebenfalls auf. Die Reihenfolge des Auftretens entspricht dabei dem Standard.
Werden mehrere Steuerelemente in der Mappe verwendet, treten die Ereignisse nur im ersten angelegten Element auf!
Handelt es sich um ein Listenfeld oder eine Combobox und der Inhalt des Steuerelementes wird nicht über ListFillRange
sondern über AddItem zur Laufzeit vorgenommen, tritt das Problem natürlich nicht auf.
Abhilfe:
In Deinem konkreten Fall lässt sich der Aufruf des Change-Ereignisses vermeiden, wenn die Neuberechnung vor dem
Speichern deaktiviert wird. Dazu den folgenden Code
Das Deaktivieren der Workbook_*- und Worksheet_*-Ereignisroutinen über EnableEvents = False ist nicht notwendig.
Gruß
Axel
ich kann nur noch sagen, meine Hochachtung vor Deiner Leistung.
Deine Hinweise muß ich mir jetzt noch einmal in aller Ruhe durch gehen, damit ich sie auch verstehe und für die Zukunft evtl. entsprechend umsetzen kann.
Also erst mal vielen Dank für Deine Hilfe.
Rolf