Opgelost Beginner zoekt hulp met 1 regel in een macro die een foutmelding geeft

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

Arnold van der Woude

Nieuwe gebruiker
Lid geworden
24 feb 2025
Berichten
2
Hallo,

Met behulp van Xellie, een AI gericht op het helpen met excelvragen, heb ik een module opgesteld om waarden in specifieke regels en kolommen te vervangen.

Code:
Sub UpdateMeasurements()
Dim wsOud As Worksheet
Dim wsNieuw As Worksheet
Dim oudeRij As Range
Dim nieuweRij As Range
Dim apparaatID As String
Dim gevonden As Range
Set wsOud = ThisWorkbook.Sheets("rapport")
Set wsNieuw = ThisWorkbook.Sheets("metingen")
'Verwijs naar de werkbladen (tabel2)
For Each nieuweRij In wsNieuw.Range("A2", wsNieuw.Cells(wsNieuw.Rows.Count, "A").End(xlUp)) apparaatID = nieuweRij.Value
'Loop door de nieuwe tabel (tabel1)
Set gevonden = wsOud.Range("A:A").Find(apparaatID, LookIn:=xlValues, LookAt:=xlWhole)
'Zoek het apparaat in de oude tabel
If Not gevonden Is Nothing Then
'Als het apparaat is gevonden, werk dan de gegevens bij
Offset(0, 7).Value = nieuweRij.Offset(0, 1).Value
'Vervang de meetdatum gevonden.
Kolom H
Offset(0, 10).Resize(1, 5).Value = nieuweRij.Offset(0, 2).Resize(1, 5).Value
'Vervang de meetgegevens gevonden.Kolommen K tot O
End If
Next nieuweRij
MsgBox "Gegevens zijn bijgewerkt!"
End Sub

Dit is de regel die een foutmelding geeft:

Code:
For Each nieuweRij In wsNieuw.Range("A2", wsNieuw.Cells(wsNieuw.Rows.Count, "A").End(xlUp)) apparaatID = nieuweRij.Value

VBA selecteert 'apparaatID' en geeft aan 'compilatiefout, verwacht instructie einde'

Kan iemand een beginner helpen? De AI loopt vast en geeft gewoon dezelfde fout weer.

Mvg. Arnold van der Woude
 
Even een Enter voor "apparaatID =" plaatsen.
Zet ook even een apostrofje voor "Kolom H"
Deze twee regels zijn onjuist:

Offset(0, 7).Value = nieuweRij.Offset(0, 1).Value
Offset(0, 10).Resize(1, 5).Value = nieuweRij.Offset(0, 2).Resize(1, 5).Value

Offset is een methode van het Range object, dus je moet aangeven ten opzichte van welke cel(len) deze offset geldt. Snap ook niet wat er moet worden gedaan en ik heb het gevoel dat de assignment andersom zou moeten.

Volgende keer geen code meer aan Xellie vragen, gewoon hier een berichtje plaatsen met beschrijving wat de code moet doen (deze beschrijving ontbreekt hier ook) en liefst een voorbeeldbestandje bijvoegen.
 
  • Leuk
Waarderingen: snb
Hallo JKPieterse,

Bedankt voor je reactie, in het verleden was Xellie wel erg handig met formules en andere verwerkingen, maar inderdaad loopt deze nog niet goed genoeg voor macro's. De foutmelding was meteen opgelost, maar de macro werkt niet en bij uitvoering worden inderdaad de offset regels aangemerkt als fout.

Sinds enige jaren ben ik keurmeester voor elektrische arbeidsmiddelen en sinds dit jaar hebben we een nieuw apparaat waaruit ik de meetgegevens kan exporteren naar excel. Deze maak ik dan zoals in de tabel op tabblad 3. Het is de bedoeling dat deze meetgegevens bij de juiste rijen in de juiste kolommen gezet worden in de originele tabel, waarbij de oude gegevens overschreven dienen te worden. Dit deed ik handmatig in het verleden omdat opslaan op het apparaat niet ging.
Zoals je kan zien, missen er volgnummers, dit zijn apparaten die inmiddels weg zijn, verkocht of afgedankt. Apparaten waarvan ik zeker ben dat ze niet nog ergens rondzwerven binnen ons bedrijf, worden verwijdert. Dit is om de uitdraai die ik maak aan het begin van het keuren, klein te houden. Dit is misschien van belang voor het schrijven van de code. Ook worden niet alle apparaten elk jaar gekeurd, dus ook in tabel2 komen niet alle volgnummers voor. Als voor het gemak van het schrijven van een macro, wel alle volgnummers in tabel1 moeten staan, dan kan ik deze weer toevoegen als lege rijen met enkel een volgnummer in kolom A.

In beide tabellen staat in kolom A het volgnummer. in kolom H van tabel1 staat de datum waarop gekeurd is, kolom k tot en met o zijn voor de meetgegevens. In tabel2 is kolom B de nieuwe keuringsdatum en de 5 daaropvolgende kolommen komen overeen met k tot en met o in tabel1.

Bijgevoegd heb ik een voorbeeldbestandje, ingekort tot de eerste 100 volgnummers. Het 2e tabblad heeft wat lijsten voor het gemak met het invoeren van nieuwe apparaten, het gaat om de tabellen op tabblad 1 en 3.
 

Bijlagen

Zet voor beide Offset statements de "gevonden" locatie, en met inspringen wordt de code beter leesbaar, zo dus:
Code:
Sub UpdateMeasurements()
    Dim wsOud As Worksheet
    Dim wsNieuw As Worksheet
    Dim oudeRij As Range
    Dim nieuweRij As Range
    Dim apparaatID As String
    Dim gevonden As Range
    Set wsOud = ThisWorkbook.Sheets("rapport")
    Set wsNieuw = ThisWorkbook.Sheets("metingen")
    'Verwijs naar de werkbladen (tabel2)
    For Each nieuweRij In wsNieuw.Range("A2", wsNieuw.Cells(wsNieuw.Rows.Count, "A").End(xlUp))
        apparaatID = nieuweRij.Value
        'Loop door de nieuwe tabel (tabel1)
        Set gevonden = wsOud.Range("A:A").Find(apparaatID, LookIn:=xlValues, LookAt:=xlWhole)
        'Zoek het apparaat in de oude tabel
        If Not gevonden Is Nothing Then
            'Als het apparaat is gevonden, werk dan de gegevens bij
            gevonden.Offset(0, 7).Value = nieuweRij.Offset(0, 1).Value
            'Vervang de meetdatum gevonden.
            'Kolom H
            gevonden.Offset(0, 10).Resize(1, 5).Value = nieuweRij.Offset(0, 2).Resize(1, 5).Value
            'Vervang de meetgegevens gevonden.Kolommen K tot O
        End If
    Next nieuweRij
    MsgBox "Gegevens zijn bijgewerkt!"
End Sub
 
Beste Arnold,

Veel beginners hebben het concept van "inspringen" nog niet onder de knie.
Hier wordt het uitgelegd:

Doe er je voordeel mee :)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan