Microsoft Excel

Herbers Excel/VBA-Archiv

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

Worksheet-Change Makro

Betrifft: Worksheet-Change Makro von: David
Geschrieben am: 11.08.2008 12:03:41

Hallo zusammen.

ich wollte folgendes Makro ausführen lassen:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
    Target = Left(Target, Len(Target) - 1)
End If
End Sub



Der Zweck ist, nach jeder Eingabe in der Spalte A diese Eingabe um eine Stelle zu kürzen. Komischerweise läuft das Makro, wenn ich auf die Anweisungs-Zeile "Target =..." einen Haltepunkt setze, problemlos durch, wenn ich den aber rausnehme, bekomme ich einen Fehler.
Ich hatte testhalber den Wert schon als Variable deklariert (x = Len(Target)), hier ebenfalls ein unterschiedliches Ergebnis: Mit Haltepunkt bekommt die Variable den korrekten Wert der Länge der Zeichenfolge, ohne Haltepunkt ist die Variable = 0.

Warum? Was mache ich falsch?

Gruß

David

  

Betrifft: AW: Worksheet-Change Makro von: Tobias
Geschrieben am: 11.08.2008 12:14:28

Hallo David!
Rekursiver Aufruf des Events. Jedes Mal wenn Du den Inhalt der Zelle änderst wird das Makro neu gestartet und rundet wieder ein Zeichen ab. Deaktiviere Events - solange das Makro läuft - und prüfe ob der Zellinhalt eventuell leer ist:



Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Worksheet_Change_Error

    If Target.Value = "" Then Exit Sub

    Application.EnableEvents = False

    If Target.Column = 1 Then
        Target = Left(Target, Len(Target) - 1)
    End If

Worksheet_Change_Exit:
    On Error GoTo 0
    Application.EnableEvents = True
    Exit Sub

Worksheet_Change_Error:
    MsgBox Err.Description
    GoTo Worksheet_Change_Exit
End Sub

Code eingefügt mit Syntaxhighlighter 4.14



Schönen Gruß, Tobias
http://www.tobiasschmid.de/


  

Betrifft: AW: Worksheet-Change Makro von: David
Geschrieben am: 11.08.2008 12:16:52

Ja, das mit dem Event leuchtet mir ein. Ich wusste nicht, dass die durch das Makro ausgelöste Veränderung das Makro wieder neu startet. Damit ergibt die Verhaltensweise mit dem Haltepunkt durchaus einen Sinn.

Danke für den Hinweis, wieder was gelernt.

Gruß

David