foutje in VBA code

Status
Niet open voor verdere reacties.

rebirth

Gebruiker
Lid geworden
17 jun 2008
Berichten
170
Ik heb een probleem met een stukje code dat ik aan het maken ben.
Ik heb een tabel, waarin gegevens zitten die ik via een import erin heb. Die gegevens wil ik nu op de juiste plaats in een andere tabel krijgen.
Ik zit al een paar dagen te puzzelen aan wat code, maar vooraleer ik ze echt kan testen of ze wel of niet werkt (er kunnen dus nog fouten inzitten :D), moet ik ze eerst aan het starten krijgen. Ik krijg namelijk altijd een melding wanneer ik ze wil starten, dat er een Else zonder If is. En dan highlight hij het stukje dat ik nu in het rood gezet heb. Maar (in mijn bedoeling toch), hoort die Else gewoon bij die if die er ietsje boven staat, namelijk "If .NoMatch Then". Kan iemand eens kijken waar de fout in mijn code (of mijn logica) zit?



Code:
Private Sub Knop20_Click()
Dim getresult As Variant
Dim strCriteria As String
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * FROM importfile2")
Dim rs2 As DAO.Recordset
Set rs2 = CurrentDb.OpenRecordset("SELECT * FROM opvang-imptmp")
'Check to see if the recordset actually contains rows
If Not (rs.EOF And rs.BOF) Then
    rs.MoveFirst 'Unnecessary in this case, but still a good habit
    Do Until rs.EOF = True
        MsgBox rs!veld6
        
        If IsNull(DLookup("[KindID]", "Kind", "[FP_id mama] = '" & rs!veld6 & "'")) Then
           
           
             MsgBox "No matches for mama... looking in papa"
        
                If IsNull(DLookup("[KindID]", "Kind", "[FP_id papa] = '" & rs!veld6 & "'")) Then
                   MsgBox "No matches, nergens nie"
                Else
                   getresult = DLookup("[KindID]", "Kind", "[FP_id papa] = '" & rs!veld6 & "'")
                   MsgBox getresult
                End If
        
        
        
        Else
           getresult = DLookup("[KindID]", "Kind", "[FP_id mama] = '" & rs!veld6 & "'")
           MsgBox getresult
        End If
    
        '------------------------------------------------------------------------
        'kijken of de record al bestaat en dan aanmaken of aanvullen
        '------------------------------------------------------------------------
        
        strCriteria = " [Kind] = " & getresult
        'rs.FindFirst strCriteria
        
        With rs2
         .FindFirst strCriteria
         If .NoMatch Then
        'kijken of het beginuur is
            If rs!veld3 <= #11:59:59 AM# Then
            'het is beginuur. maar is het veld leeg?
                    .AddNew
                      .Fields("Kind") = getresult
                      .Fields("Datum") = rs!veld2
                      .Fields("Beginuur") = rs!veld3
                    .Update
                
[COLOR="#FF0000"]            Else[/COLOR]
                    'blijkbaar is het veld het einduur
                    
                    .AddNew
                      .Fields("Kind") = getresult
                      .Fields("Datum") = rs!veld2
                      .Fields("Einduur") = rs!veld3
                    .Update
        Else
            If rs!veld3 <= #11:59:59 AM# Then
                If .Fields("Beginuur") = "" Then
                .Edit
                  .Fields("Beginuur") = rs!veld3
                .Update
                End If
            Else
                If .Fields("Einduur") = "" Then
                .Edit
                  .Fields("Einduur") = rs!veld3
                .Update
                End If
            End If
        End If
    End With

'--------------------------------------------------------------------------

        'naar de volgende record
        rs.MoveNext
    Loop
Else
    MsgBox "There are no records"
End If

MsgBox "Finished looping through records"

rs.Close 'Close the recordset
Set rs = Nothing 'Clean up
End Sub
 
Je goochelt een beetje vreemd met het inspringen, en daar alleen al zou ik heel verward van worden. Maar als je die chaos opruimt, dan zie je waarschijnlijk wel waar het fout gaat.
Code:
            Else
                If rs!veld3 <= #11:59:59 AM# Then
Je kunt geen If op deze manier achter een else zetten. Je mag IF gebruiken, ELSE, END IF en (en daar komt-ie...) ELSEIF. De syntax is dezelfde als bij de IF, dus op dezelfde regel moet ook de ELSE komen.
 
maar die if heeft niets met die else te maken. Die else slaat op die nomatch. Maw, dat is wat hij moet gebeuren als er wel een record bestaat met dat kindID.
Terwijl dat de if die er op volgt, dient om te kijken of de waarde in het veld beginuur of einduur moet komen, op basis dan de tijd. Dan mag ik daar toch geen elseif van maken? Of zie ik dit nu helemaal verkeerd?

Uit nieuwsgierigheid heb ik em uiteraard toch even getest, maar ik krijg nog steeds dezelfde melding; Compileerfout: Else zonder If

En nog ff een edit: Wat ik me nu afvraag, OctaFish, is of ik eigenlijk wel een Else mag gebruiken in combinatie met die Nomatch. Misschien daarom dat ie het niet wil aannemen? Maar ik kan daar nergens meer specifieke info over terugvinden...
 
Laatst bewerkt:
Je hebt meerdere keren dezelfde fout gemaakt. Daardoor klopt de eerste IF niet, en daarom krijg je de foutmelding op de eerste, en niet op de plek waar de fout echt zit. De geschoonde code ziet er zo uit:
Code:
If Not (rs.EOF And rs.BOF) Then
    rs.MoveFirst 'Unnecessary in this case, but still a good habit
    Do Until rs.EOF = True
        MsgBox rs!veld6
        If IsNull(DLookup("[KindID]", "Kind", "[FP_id mama] = '" & rs!veld6 & "'")) Then
            MsgBox "No matches for mama... looking in papa"
            If IsNull(DLookup("[KindID]", "Kind", "[FP_id papa] = '" & rs!veld6 & "'")) Then
                MsgBox "No matches, nergens nie"
            Else
                getresult = DLookup("[KindID]", "Kind", "[FP_id papa] = '" & rs!veld6 & "'")
                MsgBox getresult
            End If
        Else
            getresult = DLookup("[KindID]", "Kind", "[FP_id mama] = '" & rs!veld6 & "'")
            MsgBox getresult
        End If
        '------------------------------------------------------------------------
        'kijken of de record al bestaat en dan aanmaken of aanvullen
        '------------------------------------------------------------------------
        strCriteria = " [Kind] = " & getresult
        'rs.FindFirst strCriteria
        With rs2
            .FindFirst strCriteria
            If .NoMatch Then
                'kijken of het beginuur is
                If rs!veld3 <= #11:59:59 AM# Then
                    'het is beginuur. maar is het veld leeg?
                    .AddNew
                    .Fields("Kind") = getresult
                    .Fields("Datum") = rs!veld2
                    .Fields("Beginuur") = rs!veld3
                    .Update
                ElseIf rs!veld3 <= #11:59:59 AM# Then
                    If .Fields("Beginuur") = "" Then
                        .Edit
                        .Fields("Beginuur") = rs!veld3
                        .Update
                    End If
                ElseIf .Fields("Einduur") = "" Then
                    .Edit
                    .Fields("Einduur") = rs!veld3
                    .Update
                Else
                    'blijkbaar is het veld het einduur
                    .AddNew
                    .Fields("Kind") = getresult
                    .Fields("Datum") = rs!veld2
                    .Fields("Einduur") = rs!veld3
                    .Update
                End If
            End If
        End With
        '--------------------------------------------------------------------------
        'naar de volgende record
        rs.MoveNext
    Loop
Else
    MsgBox "There are no records"
End If
Of dit is wat je beoogt betwijfel ik, omdat ik vermoed dat je de ELSE op een hele andere plek wilt draaien. Maar ik heb alleen de ELSEIF constructie gerepareerd.
 
pfff, ik zie even door de bomen het bos niet meer. Volgens mij ben ik compleet verkeerd bezig, en heb ik het allemaal veel te ingewikkeld gemaakt.
En bovenal zit ik dan nog eens met een extra tabel, waarvan ik ook al twijfel of die echt wel nodig is. Gans die import is me veel moeilijker dan ik met mijn beperkte kennis aankan. :confused:
 
Ik ben weer wat verder, maar intussen ben ik ook weer enkele fouten rijker.
Eerst en vooral geeft hij de melding: " De component FROM bevat een syntaxisfout.
Daarbij verwijst hij naar de lijn
Set rs2 = CurrentDb.OpenRecordset("SELECT * FROM Opvang-imptmp")
Ik denk dat hij deze vermelding geeft, omdat de tabel in kwestie leeg is, kan dit? Want als ik ze vervang door een tabel met enkele records, gaat hij probleemloos door. Alleen is het wel de bedoeling dat deze tabel enkel en alleen die info bevat, dus hoe kan ik daar om heen werken?

Maar er zitten nog veel meer fouten/ problemen in, vrees ik. Want als ik die tabel vervang, zoals hierboven, dan loopt hij wel doorheen gans de code en krijg ik geen foutmeldingen meer, maar hij voegt de gegevens ook helemaal niet toe aan de tabel. Alleen, zonder foutmeldingen weet ik helemaal niet meer waar zoeken.
 
intussen heb ik veel geleerd, o.a. van mijn (soms domme) fouten, maar héél wat leeswerk en opzoekwerk op internet heeft me veel bijgebracht, en uiteindelijk is het me toch gelukt om de code wat te herschrijven, en correct te laten werken :-) Vraag opgelost dus. :D
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan