AW: VBA-Code war richtig - Folgefrage
18.07.2013 12:09:51
Klaus
Hallo Dietmar,
beim Barcodescanner-Thema steige ich mal mit ein :-)
dass das Change-Ereignis immer eintritt,
Das stimmt so nur bedingt. Über-Pendantisch müsste man sagen, dass das Change-Ereigniss eh immer eintritt, und dann nur Codezeilen je nach target ausgeschlossen werden -- aber es ist ja klar wie du das meinst.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1")) Is Nothing Then
Dim Wert$, x&
Wert = Target.Value
For x = 7 To 25
'If Cells(x, 2) = Wert Then Cells(x, 2) = Cells(x, 2) + 1
If Cells(x, 2) = Wert Then Cells(x, 2) = Cells(x, 2) + Range("C1").Value 'Multiplicator in _
_
C1
Next
End If
With Range("B1")
.ClearContents
.Select
End With
Range("C1").Value = 1 '1 soll der Standardeintrag des Multiplikators sein
End Sub
Der erste Teil deines Codes ist in einem intersect-IF Block und wird ausgeschlossen, wenn deine Zelle nicht B1 ist (fett).
Der zweite Teil (den meinst du mit "tritt immer ein" ist ausserhalb dieses Blocks! Wenn auch der nur bei Change von B1 eintreten soll, dann nimm ihn mit in den Block! Einfach das EndIf verschieben, sieht dann so aus:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1")) Is Nothing Then
Dim Wert$, x&
Wert = Target.Value
For x = 7 To 25
'If Cells(x, 2) = Wert Then Cells(x, 2) = Cells(x, 2) + 1
If Cells(x, 2) = Wert Then Cells(x, 2) = Cells(x, 2) + Range("C1").Value 'Multiplicator _
in C1
Next
With Range("B1")
.ClearContents
.Select
End With
Range("C1").Value = 1 '1 soll der Standardeintrag des Multiplikators sein
End If
End Sub
Jetzt wird der gesamte Code nur ausgeführt, wenn du B1 änderst.
OFFTOPIC:
Dieser Codeteil:
For x = 7 To 25
If Cells(x, 2) = Wert Then Cells(x, 2) = Cells(x, 2) + Range("C1").Value
Next
ge
fällt mir überhaupt nicht. Ich behaupte, dass geht auch ohne Schleife! Kannst du bitte mal deine Datei hochladen?
Grüße,
Klaus M.vdT.