• 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.

Opgelost VBA code doet niks?

Dit topic is als opgelost gemarkeerd

Linda2003

Gebruiker
Lid geworden
13 mrt 2025
Berichten
8
In het voorbeeld bij Kolom D heb ik een drop-down Yes/no menu gemaakt via gegevensvalidatie. De bedoeling is dat wanneer je op "Yes" klikt automatisch 3 rijen worden toegevoegd, ik probeerde dit met een VBA code (gekopieerd van chatgpt), maar die lijkt niks te doen aangezien er niks gebeurd wanneer ik in de kolom op "Yes" klik.
Ik heb de code geprobeerd aan te passen en het bestand al opgeslagen als .xlsm

Weet iemand wat ik hier verkeerd heb gedaan of anders moet doen?

Dit is de VBA code die ik hier heb gebruikt: (hij maakt hier automatisch een smiley ergens in de code maar dat hoort natuurlijk gewoon : D te zijn)

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Blad1")
Dim i As Integer

If Not Intersect(Target, ws.Range("D:D")) Is Nothing Then
Application.EnableEvents = False
If Target.Value = "Yes" Then

Dim firstMaterialCol As Integer
firstMaterialCol = 5

For i = 1 To 3
ws.Rows(Target.Row + i).Insert Shift:=xlDown
ws.Cells(Target.Row + i, firstMaterialCol).Resize(1, 10).ClearContents
Next i
End If

Application.EnableEvents = True
End If
End Sub
 

Bijlagen

Het bestand dat je hebt toegevoegd bevat geen code, maar als ik ze er zelf inplak werkt het wel degelijk.
Natuurlijk, je hebt enkel lege rijen, dus er worden lege rijen toegevoegd, dat gaat misschien onopgemerkt voorbij...
 
Die code werkt prima, je moet het natuurlijk wel achter het werkblad plaatsen, niet in een Module.
Daarnaast is dit voldoende:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 4 Then
        Application.EnableEvents = False
        If Target.Value = "Yes" Then
            For i = 1 To 3
                Rows(Target.Row + i).Insert Shift:=xlDown
                Cells(Target.Row + i, 5).Resize(1, 10).ClearContents
            Next i
        End If
        Application.EnableEvents = True
    End If
End Sub

Die smiley komt omdat je de code niet in codetags hebt geplaatst.
 
Laatst bewerkt:
Persoonlijk zou ik, voor een gerust gemoed, de EnableEvents onderbrengen in de 2e If...End If clausule zodat deze enkel getriggered wordt als aan beide voorwaarden voldaan wordt.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D:D")) Is Nothing Then
        If Target.Value = "Yes" Then
            Application.EnableEvents = False
            For i = 1 To 3
                Rows(Target.Row + i).Insert Shift:=xlDown
                Cells(Target.Row + i, 5).Resize(1, 10).ClearContents
            Next i
            Application.EnableEvents = True
        End If
    End If
End Sub
 
Prima.
Maar die Intersect is overbodig omdat het om 1 kolom gaat.
Dat kan dan zo:
Code:
If Target.Column = 4 Then
 
Dat loopje kan er wel uit toch? → Resize(3)

En wat betreft die clearcontents die je doet op lege ingevoegde rijen is mij ook een raadsel.
 
Vanuit de gedachte "(bijna) alles kan (bijna) altijd beter" (wat per definitie dus ook voor volgende geldt):
- beide 'if...endif' tot 1 herleiden?
- 'for...next' elimineren? (oei, die had HSV ook al)
- altijd drie rijen toevoegen? zoniet: inputbox erbij?
 
Terug
Bovenaan Onderaan