Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Worksheet_Change-Problem

Forumthread: Worksheet_Change-Problem

Worksheet_Change-Problem
26.11.2008 16:59:00
Dysti
Hallo,
habe folgendes Problem:
Der unten stehende Code meines Macros verursacht eine Typenunverträglichkeit in der Zeile "trenner=..."
Es entsteht nur dann, wenn ich die gefüllte Zellen mit der Maus markieren und rechte Maustaste "Inhalte löschen" anklicke.
Funktion: schreibe 100/8 und er ändert es in 100/2008

Private Sub Worksheet_Change(ByVal Zelle As Range)
Dim trenner As Byte
Dim jahreseingabe As Variant
Application.EnableEvents = False
'welche Position hat das Zeichen "/"
trenner = InStr(1, Zelle, "/")
MsgBox trenner
If trenner > 0 Then
If Left(Right(Zelle, 2), 1) = 0 Then
jahreseingabe = Left(Zelle, trenner) + "200" + Right(Zelle, 1)
Else
jahreseingabe = Left(Zelle, trenner) + "200" + Right(Zelle, 1)
End If
Zelle.Value = jahreseingabe
Zelle.HorizontalAlignment = xlRight
End If
Application.EnableEvents = True
End Sub


Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Worksheet_Change-Problem
26.11.2008 17:08:35
Luschi
Hallo Dusti,
der Übergabeparameter in der Ereignisfunktion heißt 'Target' und nicht 'Zelle'.
Auch wenn es Standardwerte bei nicht angegebenen Parametern in Vba-Funktionen gibt, sollte man der besseren Lesbarkeit und Korrigierbarkeit sie aufführen:
trenner = InStr(1, Target.Value, "/", vbTextCompare)
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Worksheet_Change-Problem
26.11.2008 17:45:00
Dysti
Hallo Luschi,
habe immer noch die Fehlermeldung
AW: Worksheet_Change-Problem
26.11.2008 19:50:00
Erich
Hallo Vorname(?),
probier mal

Private Sub Worksheet_Change(ByVal Zelle As Range)
Dim trenner As Long           ' InStr liefert einen Long-Wert
Dim jahreseingabe As String   ' besser nicht Variant
Application.EnableEvents = False
' Erklärung in der VBA-Hilfe zu VarType
MsgBox "Typ: " & VarType(InStr(1, Zelle, "/"))
trenner = InStr(1, Zelle, "/")   'welche Position hat das Zeichen "/"
MsgBox trenner
If trenner > 0 Then
If Left(Right(Zelle, 2), 1) = 0 Then
jahreseingabe = Left(Zelle, trenner) + "200" + Right(Zelle, 1)
Else
jahreseingabe = Left(Zelle, trenner) + "200" + Right(Zelle, 1)
End If
Zelle.Value = jahreseingabe
Zelle.HorizontalAlignment = xlRight
End If
Application.EnableEvents = True
End Sub

@Luschi:
Ob der Parameter Target oder Zelle heißt, ist völlig egal. Wir haben uns nur so schön an Target gewöhnt...
Trotzdem: Wegen der Gebräuchlichkeit ist Target natürlich vorzuziehen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
Richtig,...
27.11.2008 02:01:00
Luc:-?
...Erich,
aber das Hptargument für Target ist, dass das voreingestellt ist und deshalb automatisch erzeugt wird/wdn kann.
Auch Luschi's 2.Forderung halte ich für überzogen. Für Instr gibt's nun mal 2 Argumentierungsformen. Dann muss man auch erwarten können, dass beide fkt und auch gut unterscheidbar sind. Habe auch selbst schon udFs pgmiert, die eine gewisse Freizügigkeit bei der Argumentreihenfolge zulassen.
Gruß Luc :-?
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige