OT Variablen namen im Code
Hallo Niclaus,
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo finis
If Target.Column 1 Then Exit Sub
t = Cells(Target.Row, 1)
If IsEmpty(t) Then Exit Sub
Cells(Target.Row, 1) = t + 1
finis:
End Sub
Ist das vom Ansatz her überhaupt richtig gedacht?
weiß ich nicht, ich weiß weder was Knud da genau will noch was du als Ansatz hast bzw. welches Ziel.
Im Code wird eine Zelle im Wert erhöht, mehr sehe ich da nicht.
Aber ich sehe etwas anderes. Gehe mal im VB-Editor auf Extras-Optionen und hake da an „Variablendeklaration erforderlich“.
Dann hast du in Modulen immer oben stehen „Option Explicit“.
Das zwingt dich zu „Dim“. Bei kurzen Codes ist das nicht so wichtig, aber langfristig zahlt es sich aus dies konsequent immer zu benutzen.
Und, bei Kurzcodes ist „t“ okay. Mache ich auch. Aber bei längerem Code ist das kontraprodutiv. Dann muß die Variable nicht „t“ sondern „lngZellinhalt“ o.ä. heißen, damit du nach 200 Codezeilen noch erahnen kannst was in der Variablen stecken könnte als Wert.
Logischerweise mußt du dann anfangs des Codes schreiben
Dim lngZellihalt as long
Nur in extremsten zeitkritischen Codes spielt die Länge der Variablennamen eine Rolle.
Eine gewaltige Rolle spielt aber, wenn du einen Monat später den Codes lesen willst und in Zeile 300 steht Msgbox t, dann hast du doch Null Plan was t bedeutet.
bei lngZellinhalt schon eher, und genau darum geht es.
Google mal nach ungarischer Notation wenn du magst.
Und wenn du brav Option Explicit genutzt hast, was dich zu Dim zwingt, so kannst du dir die komplette Eingabe der Variablennamen ersparen, gib in dem Beispiel einfach ein
lngz
und drücke Strg+Leertaste…
Tatsächlich passiert folgendes: Statt dass die eingegebene
Zahl um 1 erhöht wird, wird sie um 222 erhöht. Kannst Du mir
erklären warum?
Die 222 kann ich nicht erklären, das Andere schon. Indem du in eine Zelle etwas reinschreibst rufst du diese Ereignis-Prozedur nochmals auf, sie schreibt wieder etwas in eine zelle, dadurch ruft sie sich nochmals auf usw.
Um das zu vermeiden müßtest du die Prozedur so schreiben:
Private Sub Worksheet_Change(ByVal Target As Range)
application.enableevents=false
’ Code
application.enableevents=True
End Sub
Gruß
Reinhard