Michelle vraagt,
Ik denk dat ik op de goede weg ben met een kringverwijzing. Hier is mijn probleem. Ik heb twee cellen,
A1=5
enB1=5
. Wat ik wil doen is B1 5 onthouden, en dan wil ik een nieuwe waarde toevoegen aan A1, zeg dat A1 nu gelijk is aan 10. Kan ik een B1-formule hebben die 5 onthoudt, maar ook 10 optelt? Dus nuB1=15
?
Meestal zijn circulaire verwijzingen een slechte zaak, maar soms kunnen ze in ons voordeel worden gebruikt. Hier is de niet-macro manier om te doen wat u wilt doen. Het werkt alleen in bepaalde situaties.
- Selecteer Extra> Opties in het Excel-menu.
- Ga naar het tabblad Berekening. Vink het vakje aan voor iteraties. Verander Maximale iteraties in 1.
- Klik op OK om het dialoogvenster met opties te sluiten.
- Voer 5 in cel A1 in.
- Voer 0 in cel B1 in
- Voer
=A1+B1
in cel B1 in - Nu, terwijl u nieuwe waarden invoert in A1, onthoudt de invoer in B1 het oude totaal en voegt de waarde van A1 toe.
Hier is de ENORME beperking. U kunt nergens anders op het blad waarden invoeren! Elke keer dat u een waarde invoert of het blad opnieuw wordt berekend, wordt de waarde in A1 opgeteld bij de waarde in B1. Dus door een aantal keren op F9 te drukken, zie je B1 met 5 toenemen voor elke F9.
De veiligere manier om dit te doen is met een kleine gebeurtenishandler-macro. U moet deze code toevoegen aan het codepaneel voor Sheet1 (ervan uitgaande dat u aan Sheet1 werkt). De gebeurtenishandlercode zou als volgt zijn:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = “$A$1” Then Application.EnableEvents = False Range(“B1”).Value = Range(“B1”).Value + Target.Value Application.EnableEvents = True End If End Sub
Dit stukje code wordt elke keer uitgevoerd dat een cel op het blad wordt gewijzigd. Target is een speciale objectvariabele die vertelt welke cel is gewijzigd. De gebeurtenishandler controleert welke cel zojuist is gewijzigd. Als de cel A1 was, wordt de waarde in A1 opgeteld bij B1. We moeten event handlers uitschakelen tijdens het veranderen van B1 zodat de event handler zichzelf niet opnieuw aanroept.