Clever-Excel-Forum

Normale Version: VBA - Zelländerung Makro auslösen, jedoch sperren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi Leute,

ich habe 52 identische Excel-Dateien. In Zelle H1 befindet sich ein Dropdownmenü mit den Namen der Dateien. Nun möchte ich bei Änderung der Zelle H1, dass er die entsprechende Datei öffnet. Das habe ich auch soweit hinbekommen mit folgendem Code:


Code:
Sub Worksheet_Change(ByVal Target As Excel.Range)
   If Target.Address = "$H$1" Then
       Call Mappeoeffnen
   End If
End Sub

Das Problem liegt nun jedoch darin, dass er zwar die Prozedur "Mappeoeffnen" ausführen soll, die Änderung, mit der das Sub gestartet wird jedoch verhindert werden soll. H1 soll also den selben Wert behalten wie vorher.

Ich möchte dem Nutzer nur suggerieren, dass er sich quasi noch in der selben Datei befindet.



Gruß
Code:
Sub Worksheet_Change(ByVal Target As Excel.Range)
  If Target.Address = "$H$1" Then
       Application.EnableEvents = False
       Call Mappeoeffnen
       Range("H1") = "Dein gewünschter Wert"
       Application.EnableEvents = True
  End If
End Sub
Hi Misterburns,

Danke für deine Antwort...
Das mit den events kannte ich noch nicht ... Das Problem ist, dass er den Wert einstellen soll, der vorher drin gestanden hat .... der ändert sich also von Datei zu Datei.
gelöscht, siehe nächster Beitrag.
Du könntest mit 

Code:
Sub Worksheet_Change(ByVal Target As Excel.Range)
 If Target.Address = "$H$1" Then
      Application.EnableEvents = False
       Application.Undo
      Call Mappeoeffnen
      Application.EnableEvents = True
 End If
End Sub

arbeiten, das ist der Rückgängig-Befehl in VBA, allerdings ist der eher unzuverlässig. Aber versuch es mal, vielleicht macht es dich ja glücklich.
Ahhhhh ...

soweit macht er mich sehr glücklich :) DANKE... inwiefern arbeitet er unzuverlässig?



Gruß


P.S.: Den Call Mappeoeffnen musste ich voranstellen
Der Befehl ist unzuverlässig, weil sobald der Benutzer eine zusätzliche Aktion ausführt, sich das Undo auf den letzten Befehl bezieht. Das hat aber in deinem Fall keine Relevanz, weil nicht möglich.
Außerdem funktioniert der Befehl nur, wenn eine händische Aktion des Benutzers ausgeführt wurde, VBA-Befehle können nicht rückgängig gemacht werden (meines Wissens).