Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Hilfe VBA-WorkcheetChange-erkennt Zelle nicht! =( | Herbers Excel-Forum


Betrifft: Hilfe VBA-WorkcheetChange-erkennt Zelle nicht! =( von: BamBi
Geschrieben am: 02.03.2010 23:00:44

Hallo

Ich hab mal wieder ein Problem und ich weiß nichtmal annähernd,
wie ich das lösen könnte....
Ich hoff, Ihr könnt mir helfen

Ich habe im VBA Code meines Tabellenblattes mit Hilfe von
Worksheet_Change einen "Eventmakro" erstellt,
sprich wenn ich eine zelle ändere, rufe ich einen Makro auf

Das funktioniert ja alles super
bloß..., jetzt möchte ich die Zelle nicht durch den Handschriftlichen Eintrag
von "x" die UserForm starten, sondern in der Zelle steht eine Formel,
Wenn (A5="Tag","x","") sollt er automatisch in dieses Feld ein X machen
und anschließend die Userform öffnen, in der ich dann auswählen kann
zwischen Morgen / Mittag / Abend.

Es funktioniert bis zum Schritt wo er mir das "x" in die Zelle reinschreibt,
sprich in meinem "Worksheet_Change" habe ich nur das ändern der Zelle
mit der "Tastatureingabe" defininert...
Wie kann ich diesem Code sagen, dass er das Resultat der Wennfunktion
nimmt, in diesem falle ja das "x", um die Userform zu öffnen.

Ich hoffe..., meine Beschreibung ist nicht zu kompliziert...
Liebste Grüße.., Bambi

  

Betrifft: AW: Hilfe VBA-WorkcheetChange-erkennt Zelle nicht! =( von: Beate Schmitz
Geschrieben am: 02.03.2010 23:17:07

Hallo Bambi,

wenn die Zelländerung durch Formelberechnung entsteht, musst du ein Worksheet_Calculate()-Makro einsetzen statt eines Worksheet_Change()-Makros.

Gruß,
Beate


  

Betrifft: AW: Hilfe VBA-WorkcheetChange-erkennt Zelle nicht! =( von: BamBi
Geschrieben am: 02.03.2010 23:22:02

Guten Abend:)

Danke für die schnelle hilfe..,
ich versteh, was Du mir geantwortet hast,
aber ich weiß nicht, wie ich das schreiben soll!? :(


  

Betrifft: AW: Hilfe VBA-WorkcheetChange-erkennt Zelle nicht! =( von: Beate Schmitz
Geschrieben am: 02.03.2010 23:43:54

Hallo Bambi,

das wäre deine Tabelle mit der Formel in C5:

 ABC
5Tag x

Formeln der Tabelle
ZelleFormel
C5=WENN(A5="Tag";"x";"")


Dann das Makro so:

Private Sub Worksheet_Calculate()
    If Range("C5").Value = "x" Then UserForm1.Show
End Sub



Zelladresse und UserForm-Nr. anpassen! Das Makro gehört ins Codefenster der Tabelle.

Das hat aber den Nachteil, dass bei jeder Berechnung in der Tabelle, also auch wenn bereits ein "x" in C5 steht, die Userform anspringt.

Daher würde ich es beim Worksheet_Change bezogen auf A5 belassen:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A5").Value = "Tag" Then UserForm1.Show
End Sub



Gruß,
Beate


  

Betrifft: Korrektur von: Beate Schmitz
Geschrieben am: 02.03.2010 23:47:20

Beim obigen Worksheet_Change-Makro habe ich eine wichtige Zeile vergessen:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("A5")) Is Nothing Then Exit Sub
    If Range("A5").Value = "Tag" Then UserForm1.Show
End Sub


Gruß,
Beate


  

Betrifft: Schlage vor, nimm noch ein _SelectionChange-... von: Luc:-?
Geschrieben am: 03.03.2010 01:08:39

…Ereignis dazu, Bambi,
das, bei If Not Intersect(Target, Range("A5")) Is Nothing Then mit Target.Calculate oder With Target: .Formula = .Formula: End With eine Neuberechnung der Zelle veranlasst. Alternativ könnte natürlich auch schon hier bei Target = "x" die UF gestartet wdn. Allerdings musst du die Zelle dann erst auswählen. Da du aber dann sowieso in der UF irgendwas auswählen willst, wohl um einen entsprechenden Blatteintrag vorzunehmen bzw zu veranlassen, könntest du natürlich auch gleich das _BeforeDoubleClick-Ereignis (auf beliebiger Zelle) verwenden und dort dann nach dem Inhalt von A5 fragen. _Calculate wird ja auch nur ausgeführt, wenn gerade irgendwas berechnet wird, ist also - wie auch Beate schreibt - eigentl nicht zu empfehlen.
Fazit: Du solltest also noch mal die Gesamtorganisation deines Vorhabens, also den konkreten Ablauf überdenken, dann müsste sich das, was sinnvoll möglich ist, quasi von allein ergeben.
Man kann das auch viel direkter über die Fml selbst steuern, wenn sie eine spezifische udFkt enthält, die das veranlasst, aber das nur nebenbei, denn so etwas steht auf einem anderen „vbLevel-Blatt“… ;-) Allerdings muss das in deinem konkreten Fall auch nicht gerade sinnvoll sein!
Gruß Luc :-?