Foutmelding VBA

Status
Niet open voor verdere reacties.

Judithdoek

Gebruiker
Lid geworden
9 mrt 2021
Berichten
70
Hallo allemaal,

Ik probeer sinds een maandje VBA onder de knie te krijgen, helaas is het mij nog niet gelukt een macro uit te voeren.
Ik denk dat ik iets fout doe in de syntaxis en dat ik vervolgens de foutmelding niet begrijp.
Ik heb al eerder een aantal vragen gesteld op dit forum, maar ook hier blijf ik foutmeldingen krijgen.

Heeft iemand tips om meer te leren over VBA als het gaat om de grammatica hiervan? Helaas kom ik er met internet niet altijd uit (tot nu toe nooit).

Misschien dat iemand mij kan helpen met bijgevoegd bestandje. Het liefst leer ik wat ik fout doe en hoe de syntaxis in elkaar zit.

De bedoeling is dat in Blad1 automatisch een nieuw uniek nummer aangemaakt wordt door middel van het klikken op de knop, dit unieke nummer moet opgeslagen worden in Blad2 in kolom D.

Uiteindelijk worden hier meer gegevens aan verbonden, maar deze worden handmatig ingevoerd, maar moeten wel worden opgeslagen in de rij van het unieke nummer.

Enkel krijg ik met de volgende code
Code:
Option Explicit

Private Sub CommandButton1_Click()
Dim UniekNummer As String
UniekNummer = ActiveSheet.Range("B4").Value
Sheets("Blad2").Range("D2:D421").ClearContents.xlPasteValues
Range("B4").Value = Range("B4").Value + 1
End Sub

Fout 9 en soms fout 424, ook wordt de regel Private Sub CommandButton1_Click() geel gearceerd. Ik heb op internet gekeken, maar het is duidelijk ik snap waarschijnlijk niet hoe de syntaxis in elkaar zit.

Excuses als ik niet helemaal duidelijk ben, maar kan iemand mij helpen en uitleg geven?

Groeten!
 

Bijlagen

Deze regel is fout, ik begrijp ook niet wat je er mee wilt doen:
Code:
Sheets("Blad2").Range("D2:D421").ClearContents.xlPasteValues

Ook die Dim is overbodig omdat je die variabele nergens gebruikt.
Dus deze ken er ook uit:
Code:
UniekNummer = ActiveSheet.Range("B4").Value

Die Option Explicit mag er ook uit.
Blijjft over:
Code:
Private Sub CommandButton1_Click()
    With Sheets("Blad2")
        .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Value =  Sheets("Blad1").Range("B4").Value
    End With
    Range("B4").Value = Range("B4").Value + 1
End Sub
 
Laatst bewerkt:
Bedankt voor je reactie.

Met:
Code:
Sheets("Blad2").Range("D2:D421").ClearContents.xlPasteValues
wilde ik de gegevens in blad2 in kolom D plakken als waarde, omdat er normaal gesproken een formule instaat. Wegens gevoelige gegevens heb ik dat niet overgenomen.
Ik snap dat de regel fout is, maar wat is er dan precies fout en waarom?

Ik lees inderdaad vaker dat Option Explicit eruit mag, maar wanneer mag dit en wanneer niet?
 
Zo te zien wil je een range vullen; probeer deze eens.
Code:
Dim i As Integer
    Sheets("Blad2").Range("D2:D421").ClearContents
    With Sheets("Blad2")
        .Cells(.Rows.Count, "D").End(xlUp).ClearContents
        For i = 2 To 421
            .Cells(i, 4).Value = Sheets("Blad1").Range("B4").Value
            Range("B4").Value = Range("B4").Value + 1
        Next i
    End With
 
Code:
Sheets("Blad2").Range("D2:D421").ClearContents.xlPasteValues
Ik snap dat de regel fout is, maar wat is er dan precies fout en waarom?
ClearContents en PasteValues kun je niet in één actie zetten. Dus ofwel Clearcontents, of gelijk plakken.
Ik lees inderdaad vaker dat Option Explicit eruit mag, maar wanneer mag dit en wanneer niet?

Ik raad aan om Option Explicit wél te gebruiken; zeker als je meerdere variabelen gebruikt die verschillende waarden hebben. Zo kun je een variabele als String definiëren als je tekst wilt opslaan, en als Integer als je getallen wilt bewaren. Jij had een getalvariabele gedefinieerd als String, en dát is nu dus precies fout: een getal is namelijk geen tekst. Dus dat moet je nooit meer doen :).
 
Wat heeft deze vraag trouwens met websites te maken? Volgens mij is het gewoon een Excel vraag en staat-ie in het verkeerde forum :D.
 
Wat heeft deze vraag trouwens met websites te maken? Volgens mij is het gewoon een Excel vraag en staat-ie in het verkeerde forum
Soms worden VBA vragen in "Website maken, Programmeren" forum gezet omdat daar alle programmeer vragen staan, niet alleen de website vragen. De enige uitzondering zijn de Office programmeer vragen. Daardoor is het soms niet helemaal duidelijk welk forum gekozen moet worden. Geeft niet, ik verplaats zulke vragen naar VBA :)

update. bij mij is soms niet duidelijk of de vraag het beste in het Excel of in het VBA forum gezet moet worden :confused:
 
Laatst bewerkt:
Ik zou zeggen: Excel forum; is niet bepaald een ingewikkelde VBA vraag.
 
Is wel een beetje twee kanten op te lezen deze vraag.

Code:
Private Sub CommandButton1_Click()
  x = Application.Max(Sheets("Blad2").Columns(4)) + 1
  Sheets("Blad2").Cells(Rows.Count, 4).End(xlUp).Offset(1) = x
  Cells(4, 2) = x
End Sub
 
Zo te zien wil je een range vullen; probeer deze eens.
Code:
Dim i As Integer
    Sheets("Blad2").Range("D2:D421").ClearContents
    With Sheets("Blad2")
        .Cells(.Rows.Count, "D").End(xlUp).ClearContents
        For i = 2 To 421
            .Cells(i, 4).Value = Sheets("Blad1").Range("B4").Value
            Range("B4").Value = Range("B4").Value + 1
        Next i
    End With

Een hele fijne macro deze ga ik zeker bewaren, maar helaas niet wat ik bedoelde. De code moet allereerst het nummer 2021-0001 aanmaken en vervolgens worden er nog andere gegevens handmatig ingevoerd, dan bij het drukken op de knop moeten al die gegevens opgeslagen worden. Het nummer 2021-0001 wordt opgeslagen in D2 en in de rij daaropvolgend de andere gegevens, de gegevens moeten dan ook verdwijnen in Blad1 en er moet dan het nummer 2021-0002 in cel B4 komen te staan. En zo verder.
 
Deze regel is fout, ik begrijp ook niet wat je er mee wilt doen:
Code:
Sheets("Blad2").Range("D2:D421").ClearContents.xlPasteValues

Ook die Dim is overbodig omdat je die variabele nergens gebruikt.
Dus deze ken er ook uit:
Code:
UniekNummer = ActiveSheet.Range("B4").Value

Die Option Explicit mag er ook uit.
Blijjft over:
Code:
Private Sub CommandButton1_Click()
    With Sheets("Blad2")
        .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Value =  Sheets("Blad1").Range("B4").Value
    End With
    Range("B4").Value = Range("B4").Value + 1
End Sub

Ja dit is hem, excuus voor de late reactie, maar heel erg bedankt!
 
Deze regel is fout, ik begrijp ook niet wat je er mee wilt doen:
Code:
Sheets("Blad2").Range("D2:D421").ClearContents.xlPasteValues

Ook die Dim is overbodig omdat je die variabele nergens gebruikt.
Dus deze ken er ook uit:
Code:
UniekNummer = ActiveSheet.Range("B4").Value

Die Option Explicit mag er ook uit.
Blijjft over:
Code:
Private Sub CommandButton1_Click()
    With Sheets("Blad2")
        .Cells(.Rows.Count, "D").End(xlUp).Offset(1).Value =  Sheets("Blad1").Range("B4").Value
    End With
    Range("B4").Value = Range("B4").Value + 1
End Sub

Toch nog even een vraagje, de bedoeling is dat hij niet vanaf 1 gaat tellen, maar vanaf 2021-0001, hoe krijg ik dat voor mekaar?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan