Vraag


Acties:
  • 0 Henk 'm!

  • jmvdb22
  • Registratie: Februari 2012
  • Laatst online: 17-01-2022
hallo,
ik ben bezig met een excelbestand waarin ik dmv gegevensvalidatie een drop-down lijst heb. ik heb 2 macro's in dit bestand. als ik 1 van de opties selecteer wil ik graag de 1e macro laten starten en daarna de 2e, als ik 1 van de andere opties kies wil ik graag alleen de 2e macro starten.

ik heb dit tot nu toe:
Visual Basic:
1
2
3
4
5
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Range("F:F"), Range(Target.Address)) Is Nothing Then
    Call macro2
  End If
End Sub

dit werkt voor de ene macro, maar deze werkt dus altijd(wat ook moet), maar ik krijg op geen mogelijkheid de 2e erin.

ik gebruik excel 2013 voor windows 7.

alvast bedankt voor de reacties :)

net iets te snel gepost, hele middag bezig geweest en een paar minuten na het posten is het opgelost...

[ Voor 8% gewijzigd door F_J_K op 03-03-2016 09:13 . Reden: [code=vb] ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • ajakkes
  • Registratie: Maart 2004
  • Laatst online: 16-05 22:32

ajakkes

👑

Hoe?

👑


Acties:
  • 0 Henk 'm!

  • donderdraak
  • Registratie: Juni 2002
  • Laatst online: 09-07-2017
jmvdb22 schreef op woensdag 02 maart 2016 @ 17:20:
net iets te snel gepost, hele middag bezig geweest en een paar minuten na het posten is het opgelost...
Plaats dan ook de oplossing die je zelf gevonden hebt, zodat anderen daar wat aan hebben....

Acties:
  • 0 Henk 'm!

  • jmvdb22
  • Registratie: Februari 2012
  • Laatst online: 17-01-2022
oh ja sorry, uiteindelijk blijkt die toch niet goed te werken zoals ik hem nodig heb, is nu weer veranderd in dit:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim x As String
    x = "Afgehandeld"
    Dim y As String
    y = "bb transport"
    If Range("F:F").Text = x And Range("K:K").Text = y Then
        Call Nieuwe_Container
    Else
        Call sorteren
    End If
End Sub


maar nu wordt 'nieuwe_container' nooit opgeroepen
(nieuwe container was macro2 en sorteren macro1)
de bedoeking is dus dat als in F afgehandeld staat en in K bb transport de macro nieuwe container wordt gestart en daarna de macro sorteren, als dit niet zo is moet alleen de macro sorteren worden gestart.

[ Voor 1% gewijzigd door F_J_K op 03-03-2016 09:12 . Reden: [code=vb] ]


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

maar nu wordt 'nieuwe_container' nooit opgeroepen
Je kunt na Call Nieuwe_Container ook nog Call sorteren doen.

offtopic:
Voor de herkenbaarheid zou ik alle functies laten beginnen met hoofdletter.

Ook: ik pas je posts een klein beetje aan door er [code] tags omheen te zetten: dan is je code beter leesbaar.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • jmvdb22
  • Registratie: Februari 2012
  • Laatst online: 17-01-2022
F_J_K schreef op donderdag 03 maart 2016 @ 09:12:
[...]

Je kunt na Call Nieuwe_Container ook nog Call sorteren doen.
het probleem is nu dat hij altijd sorteren start, maar nooit nieuwe_container, dus ik denk dat de fout in de If functie zit op dit moment.

Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Ah die bekijk ik nu pas. Je checkt of de hele kolom F de tekst heeft. Dat lijkt me niet de bedoeling ;) Check de waarde van een individuele cel. De huidige IF() zal altijd FALSE opleveren - en dus altijd de Else activeren.

Als die is gecorrigeerd dan zal ook mijn eerdere opmerking van toepassing worden.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • jmvdb22
  • Registratie: Februari 2012
  • Laatst online: 17-01-2022
oke, nu werkt de macro opzichzelf wel, maar blijft die vastzitten in een loop en blijft die dus sorteren na de 1e verandering die Nieuwe_Container start. Ook stopt die de macro Nieuwe_Container na de eerste verandering.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim x As String
    x = "Afgehandeld"
    Dim y As String
    y = "bb transport"
    If ActiveCell.Text = x And ActiveCell.Offset(0, 5).Text = y Then
        MsgBox "ja"
        Call Nieuwe_Container
        End If
        MsgBox "nee"
        Call sorteren
End Sub


dus hij start de macro, maar ziet dan een verandering gebeuren en begint dus zelf overnieuw voordat de macro zijn ding gedaan heeft.

Edit:
gevonden, nieuwe code is nu dit:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Dim x As String
    x = "Afgehandeld"
    Dim y As String
    y = "bb transport"
    If ActiveCell.Text = x And ActiveCell.Offset(0, 5).Text = y Then
        Call Nieuwe_Container
        End If
        Call Sorteren
    Application.EnableEvents = True
End Sub


bedankt voor alle hulp iig :)

[ Voor 24% gewijzigd door jmvdb22 op 03-03-2016 10:38 ]


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Je ziet dat in de huidige opzet Sorteren() ook wordt aangeroepen als er iets wijzigt in een willekeurige cel. Dan krijg je dus inderdaad een loop. Oplossing: haal Sorteren() weer terug naar de Else. En zet sorteren ook na aanroepen van Nieuwe_Container

Maar dan nog heb je een loop. Immers wijzigt er iets en is de inhoud van de cellen die je in de gaten wil houden niet gewijzigd. Je zult dus in dezelfde functie of die 2 cellen moeten aanpassen, of je moet een derde cel maken waarmee je de macro "uitschakelt" middels een extra If: als die cel gevuld dan stoppen. Mooier is een variabele gebruiken maar je bent duidelijk een beginner dus ik houd het even makkelijk. (Of idd EnableEvents gebruiken, al is dat IMHO geen structurele oplossing).

Je wilt overigens IMHO nooit ActiveCell gebruiken: die triggert ook als ergens in cel Z999 het woord Afgehandeld verschijnt. En triggert juist niet op de juiste plaats als je actieve cel elders is. Wijs dus naar een specifieke cel, bijv. Cells(1,1) en cells(1,6). Met Offset werken is wel een leuk bedachte omweg trouwens :)

Edit: m.i. wil je nog steeds Sorteren() binnen de if halen en ActiveCell verwijderen :P

[ Voor 7% gewijzigd door F_J_K op 03-03-2016 10:46 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • jmvdb22
  • Registratie: Februari 2012
  • Laatst online: 17-01-2022
zoals die hier staat werkt die en het sorteren moet eigenlijk ook gebeuren als in een andere cel iets verander, dus dat komt mooi uit zo ;)
Pagina: 1