Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VBA] Ongewenste / foutief uitvoeren van macro

Pagina: 1
Acties:

  • pjcra
  • Registratie: September 2003
  • Laatst online: 09-09-2020
Korte beschrijving:

Indien cel A1 = 4 en indien in cel B1 een cijfer wordt ingevoegd dan moet een macro lopen die in C1 een getal invoert. Hetzelfde geldt voor B2 en C2.

''""A B C
1""4 5 3
2"""""2 9




Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count = 1 Then

If Target = Range("b1") Then If Range("a1").Value = 4 Then macro2
If Target = Range("b2") Then If Range("a1").Value = 4 Then macro3

End If

End Sub

Sub macro2()

Range("c1").Value = InputBox(y)

End Sub

Sub macro3()

Range("c2").Value = InputBox(z)

End Sub




En alles werkt perfect als je bij de B1 en B2 verschillende getallen ingeeft. Maar stel nu dat je een 5 ingeeft en dus in b1 terecht komt en als inputboxwaar 3. En vervolgens geef je terug 5 in b2, dan geeft hij niet macro3, maar eerst macro2 en dan macro3.

''""A B C
1""4 "5 3
2"""""5 9


Weet iemand hoe dat komt?

Verwijderd

Omdat dat aan beide voorwaarden voldoet die je postuleert in je event-macro. ;)

Ik zou zeggen: herschrijf de voorwaarden in je event macro zo, dat er een hiërarchie ontstaat, bijv: eerst moet gekeken worden naar de condities om macro 2 uit te voeren. Als die waar zijn, voer je macro twee uit. Zo niet, kijk dan of de voorwaarden voor macro 3 waar zijn. Op die manier zal altijd één van de twee macro's uitgevoerd worden.
Een alternatief is werken met een Select Case/End Select (google) blok.

  • pjcra
  • Registratie: September 2003
  • Laatst online: 09-09-2020
Alvast bedankt.

Ik ben geen expert in VBA. Maar ik zie niet echt in waarom aan beide condities voldaan wordt?

Als er al een 5 staat in cel B1, en ik typ een tweede vijf in cel B2, dan gaat die Private Sub Worksheet_Change(ByVal Target As Range) werken. Die moet dan toch normaal gaan kijken, welke cel is hier veranderd? Die moet dan zien: ahja: het is was cel b2 en a1=4 dus ik ga macro3 uitvoeren.

En beide events hebben dezelfde voorwaarden. Hoe kan ik dan gaan prioritiseren?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Visual Basic:
1
If Target = Range("b1")

Betekent iets anders dan je denkt :)

Je geeft geen property op en dan pakt vba de defaultproperty 'value'. Dus volledig uitgeschreven staat hier:
Visual Basic:
1
if target.value = range("B1").value 
en dat maakt beide condities waar.

Je bedoelt waarschijnlijk:
Visual Basic:
1
2
3
 if target.adress="$B$2" 
of
if not Intersect(target,range("B2")) is nothing

[ Voor 4% gewijzigd door Lustucru op 11-05-2009 13:17 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • pjcra
  • Registratie: September 2003
  • Laatst online: 09-09-2020
Amai!! Bedankt. Dat lost mijn probleem super handig / kort / eenvoudig op!