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

[VBA] Forceren om in macro te blijven

Pagina: 1
Acties:

  • pjcra
  • Registratie: September 2003
  • Laatst online: 09-09-2020
Ik heb een macro waarin een code staat die checkt als een bepaalde cel veranderd wordt, dat ie een bepaalde actie doet:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count = 1 Then

If Target = Range("b71") Then If Range("r75").Value = "z1_20%5" Then tarief4z1

End If

End Sub


Nu heb ik een tweede macro , tarief4z1 , die loopt dus als cel b71 verandert en r75 voldoet aan de voorwaarde.


Sub tarief4z1 ()

Range("f515").ClearContents......

End sub



Maar als ie van de eerste macro naar de tweede macro gaat, dan gaat ie dus range f515 deleten. Dan merkt ie dat er een cel veranderd is en dan gaat ie terug naar de eerste macro.

En nu zou ik graaag willen, of zoek ik naar een code, die VBA verplicht om in de tweede macro te blijven, zonder dat ie terug gaat naar de vorige macro.

Bestaat dat?

  • Witte
  • Registratie: Februari 2000
  • Laatst online: 15-10 13:46
Kan je niet een globale variabele definieren, die noem je InMacro

Bij openen van je sheet zet je InMacro = FALSE
Bij begin van Macro2 zet je de variabele InMacro = TRUE
Bij einde van Macro2 zet je de variabele InMacro = FALSE

En in de eerste regel van Macro1 zet je de expressie:
If InMacro then Exit Sub


Ik geef toe, niet heel efficient. Ik weet niet of je het On Change-event kan uitschakelen.

[ Voor 13% gewijzigd door Witte op 05-05-2009 15:18 ]

Houdoe


Verwijderd

Visual Basic .NET:
1
Application.EnableEvents = False


Die zet je boven de ClearContentsregel in je tweede macro. Niet vergeten events daarna weer in te schakelen:

Visual Basic .NET:
1
Application.EnableEvents = True


Overigens snap ik niet waarom je ClearContents-commando in je tweede Sub ertoe leidt dat je Event Macro weer gaat lopen - je hebt Target immers toch gedefinieerd als Range("B71")? Mis ik iets?

[ Voor 31% gewijzigd door Verwijderd op 05-05-2009 15:42 ]


Verwijderd

Verwijderd schreef op dinsdag 05 mei 2009 @ 15:40:
Visual Basic .NET:
1
Application.EnableEvents = False


Die zet je boven de ClearContentsregel in je tweede macro. Niet vergeten events daarna weer in te schakelen:

Visual Basic .NET:
1
Application.EnableEvents = True


Overigens snap ik niet waarom je ClearContents-commando in je tweede Sub ertoe leidt dat je Event Macro weer gaat lopen - je hebt Target immers toch gedefinieerd als Range("B71")? Mis ik iets?
je geeft in ieder geval de goede oplossing. de gebeurtenisprocedure wordt getriggerd van zodra er iets op de sheet verandert, daarna kan in de afhandelingsprocedure zelf pas de verdere controle gebeuren of het de juiste cel (target) betreft.