• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

macro (of code) starten als waarde specifieke cel wijzigt

Status
Niet open voor verdere reacties.

Andre175

Gebruiker
Lid geworden
2 feb 2018
Berichten
351
goedemorgen

Onderstaande code zou moeten starten wanneer de waarde van Sheets("Bijlage_2").Range("D8") wijzigt.

Code:
Sub ID_Deb_bepalen()
      With Sheets("debiteuren")
            For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
                If .Cells(i, 3) = Sheets("Bijlage_2").Range("D8") Then
                Sheets("Bijlage_2").Range("B1") = .Cells(i, 1)
                End If
            Next i
        End With
End Sub


waar (en hoe) moet ik code plaatsen zodat deze alleen actief wordt zodra de waarde van Sheets("Bijlage_2").Range("D8") wijzigt.

Als ik de code hier plaats
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub
dan zal deze actief worden bij elke wijziging op dit blad, hetgeen overbodig is lijkt me
 
in de werkbladmodule van bijlage_2
de wijziging moet wel door een nieuwe ingave gebeuren, niet omdat door een formule de waarde van D8 wijzigt !
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D8")) Is Nothing Then ID_Deb_bepalen
End Sub
 
Laatst bewerkt:
of :

Code:
If Target.Address = "$D$8" Then
 
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D8")) Is Nothing Then 

      With Sheets("debiteuren")
            For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
                If .Cells(i, 3) = Sheets("Bijlage_2").Range("D8") Then
                Sheets("Bijlage_2").Range("B1") = .Cells(i, 1)
                End If
            Next i
        End With
    end if
End Sub

Dit werkt wel......

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$8" Then

      With Sheets("debiteuren")
            For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
                If .Cells(i, 3) = Sheets("Bijlage_2").Range("D8") Then
                Sheets("Bijlage_2").Range("B1") = .Cells(i, 1)
                End If
            Next i
        End With
    End If
End Sub

Dit werkt niet......
Zou het wel moeten werken?


En wat doet If Not Intersect(Target, Range("D8")) dit precies?
 
Laatst bewerkt:
Vreemd dat die tweede optie bij jou niet werkt. dat zou wel moeten.
Zonder bestand kan ik niet zeggen waarom niet.
Mogelijk samengevoegde cellen?
 
Laatst bewerkt door een moderator:
nope.... geen samengevoegde cellen.
D8 is een cel waar een waarde (naam van debiteur) van een filter van een draaitabel in staat.
 
Laatst bewerkt:
Mogelijks veranderen er meerdere cellen tegelijkertijd, het hoeven daarom geen samengevoegde cellen te zijn.
Verander je bv. in 1 keer de waarde van meerdere cellen, dan zal die intersect detecteren of je ene cel er tussen zit,
in het geval van alleen target.address, kan je bv de adressen van de cellen D8,D9 en D10 krijgen en die zijn natuurlijk niet gelijk aan enkel D8.

Ook nog opletten als je in die macro weer D8 zou wijzigen, dan kom je vast te zitten in een loopje en zou je moeten werken met application.enableevents
 
Laatst bewerkt door een moderator:
Is dit niet logischer ?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$D$8" Then
      sn = Sheets("debiteuren").cells(1).currentregion.resize(,3)

      For j = 2 To Ubound(sn)
        If sn(j,3) = Target.value Then exit for 
      Next

      if j<=ubound(sn) then target.offset(-2,-7)=sn(j,1)
  End If
End Sub
 
Laatst bewerkt:
Wanneer D8 wijzigt, wijzigen er idd meer cellen op dit blad.
in D8 staat immers een filter van een draaitabel.

ik zal de uitleg van intersect eens gaan bestuderen.

mijn vraag is nu voor mij beantwoord.
Iedereen wederom bedankt voor de reacties
 
@ SNB....
de code die je voorstelt in #9 zal ik eens rustig moeten gaan bekijken.
Eerlijk is eerlijk, mijn kennis is nog niet zo uitgebreid dat ik dit zo ff bedenk.

Ik vermoed dat de code die jij voorstelt sneller is dan de code die ik bedacht heb omdat eerst alles in het geheugen gezet wordt.
klopt mijn vermoeden?
 
Laatst bewerkt:
Het ging er mij vooral om dat je in de code 'Target' niet gebruikt, maar Sheets("Bijlage_2").Range("D8").
Maar het klopt: hoe minder interaktie met werkbladen (zowel lezen als schrijven) hoe sneller de afwikkeling van de code.
Ook het onderhoud van de code is gebaat bij 'klare' regels (cfr. Joost Swarte).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan