For i = 1 To ...

Status
Niet open voor verdere reacties.

Tamara27

Gebruiker
Lid geworden
1 mrt 2010
Berichten
224
Situatie:

Combobox 1 -- tabblad1 met 5 checkboxen (rood1- geel1- groen1- blauw1- paars1)
Combobox 2 -- tabblad2 met 5 checkboxen (rood2- geel2- groen2- blauw2- paars2)
Combobox 3 -- tabblad3 met 5 checkboxen (rood3- geel3- groen3- blauw3- paars3)
Combobox 4 -- tabblad4 met 5 checkboxen (rood4- geel4- groen4- blauw4- paars4)

de bedoeling is dat deze gegevens opgeslagen worden in een tabel. per checkbox die is aangeduid, zou een record moeten toegevoegd worden aan de tabel.

Staat in de eerste rij bijv in combobox1: "krijt" en worden op tabblad1 bijv rood 1 en geel1 aangeduid, worden er twee records gemaakt, eentje wordt: krijt - rood, de tweede wordt: krijt- geel.

ik heb de volgende loop die werkt op andere formulieren, maar hier wil hij niet echt lukken:

Code:
                For Each ctl In Controls
                With ctl
                Select Case .ControlType
                    Case acCheckBox
                        If .Value = -1 Then
                            sNevenwerking = Mid(.Name, 6, Len(.Name) - 5)
                            sTabel = .Tag
                            On Error Resume Next
                            With CurrentDb.OpenRecordset("GegevensBehandelingNevenwerking")
                                .AddNew
                                ![Unieke code] = cmbCode
                                ![Behandeling] = Me("cmbBehandeling" & i)
                                ![Nevenwerking Behandeling] = Me("sNevenwerking" & i)
                                .Update
                                .Close
                            End With
                          End If
                End Select
                End With
                Next ctl

Dr zit waarschijnlijk iets fout in het gedeelte van de 'nevenwerking', want hij maakt een mooi record met de unieke code en de behandeling, maar de nevenwerking blijft blanco. de naam voor die nevenwerking is altijd KEUZEnevenwerking + nummer

Iemand die me kan helpen?
 
Ik zie nog geen loopje met For i= 1 to [Maxwaarde]. Dat betekent dus dat je i nog niet hebt ingesteld, en de variabele dus niet goed uitleest. Ook moet je de loop dan nog verder ophogen en stoppen.

Code:
For i=1 to [Maxwaarde]
    ![Nevenwerking Behandeling] = Me("sNevenwerking" & i)
Next i
 
komt omdat ik het stukje gekopieerd heb :)

Hierbij de VOLLEDIGE code, die achter de commandbutton schuilt :) (waarvoor ook al een groot stuk van uw hulp nodig was :-) )

Code:
Private Sub cmdVerder_Click()
Dim i As Integer
Dim sTabel As String, sPatient As String, sBehandeling As String, strSQL As String
Dim dtDatum As Date, iDatum As Double
Dim bCheck As Boolean
Dim lResponse As Integer
sTabel = "GegevensBehandeling"

If cmbCode = "" Then
MsgBox ("Vul de unieke code in aub")
Exit Sub

ElseIf Nz(cmbBehandeling1, "") = "" Then
MsgBox ("Vul de behandeling in aub")
Exit Sub

ElseIf Nz(cmbBehandeling1, "") <> "" And Nz(cmbCode, "") <> "" Then

lResponse = MsgBox("Weet u zeker dat u wilt verder gaan?", vbYesNo)

If lResponse = No Then
Exit Sub

Else
    For i = 1 To 4
        If Me("cmbBehandeling" & i) <> "" Then
            On Error Resume Next
            sPatient = Me.cmbCode
            sBehandeling = Me("cmbBehandeling" & i)
            dtDatum = Me("txtStart1" & i)
            iDatum = CDbl(dtDatum)
            Dim tmp
            strSQL = "SELECT DISTINCT [Unieke Code], [Type behandeling], [1ste startdatum] FROM " & sTabel & vbCrLf _
                & "WHERE (" _
                & "[Unieke Code] = '" & sPatient & "'" & vbCrLf _
                & "AND [Type behandeling] = '" & sBehandeling & "'" & vbCrLf _
                & "AND CDbl([1ste startdatum]) = " & iDatum _
                & ")"
''                tmp = InputBox("", "", strSQL)
            With CurrentDb.OpenRecordset(strSQL)
                If .RecordCount > 0 Then
                    bCheck = True
                Else
                    bCheck = False
                End If
                .Close
            End With
            
            If bCheck = False Then
                With CurrentDb.OpenRecordset(sTabel)
                    .AddNew
                    ![Unieke code] = Me.cmbCode
                    ![Type behandeling] = Me("cmbBehandeling" & i)
                    ![Dosis] = Me("txtDosis" & i)
                    ![1ste startdatum] = Me("txtStart1" & i)
                    ![1ste stopdatum] = Me("txtStop1" & i)
                    ![2de startdatum] = Me("txtStart2" & i)
                    ![2de stopdatum] = Me("txtStop2" & i)
                    ![3de startdatum] = Me("txtStart3" & i)
                    ![3de stopdatum] = Me("txtStop3" & i)
                    ![Extra] = Me("txtExtra" & i)
                    .Update
                    .Close
                End With
                
                For Each ctl In Controls
                      With ctl
                      Select Case .ControlType
                          Case acCheckBox
                              If .Value = -1 Then
                                  sNevenwerking = Mid(.Name, 6, Len(.Name) - 5)
                                  sTabel = .Tag
                                  On Error Resume Next
                                  With CurrentDb.OpenRecordset("GegevensBehandelingNevenwerking")
                                      .AddNew
                                      ![Unieke code] = cmbCode
                                      ![Behandeling] = Me("cmbBehandeling" & i)
                                      ![Nevenwerking Behandeling] = Me("sNevenwerking" & i)
                                      .Update
                                      .Close
                                  End With
                              End If
                      End Select
                  End With
              Next ctl
            End If
        End If
    Next i
MsgBox ("Gegevens opgeslagen")


End If
End If
DoCmd.Close acForm, "F_InvoerenGegevensBehandeling"
DoCmd.OpenForm "Startformulier"

End Sub
 
Hoi Tamara,
D'r gaat toch niks boven oplettende leerlingen :D. De code ziet er netjes uit! Maar het is voor mij zo lastig te zien waarom hij geen waarde opslaat. Misschien kun je met een Msgbox eens controleren of de gegevens wel netjes worden opgehaald. Bijvoorbeeld hier:

![Behandeling] = Me("cmbBehandeling" & i)
MsgBox sNevenwerking & vbLf & Me("sNevenwerking" & i)
![Nevenwerking Behandeling] = Me("sNevenwerking" & i)
 
Heb dit ingebouwd, maar geen reactie, ik zie geen msgbox :(
daar zit dus al iets fout?
 
Dan lijkt het er op dat er een stap niet wordt doorlopen. Je zou ook met onderbrekingspunten kunnen werken, en op die manier controleren of alle stappen (en variabelen) goed worden doorlopen.
 
ik denk dat het fout zit bij die benoeming van sNevenwerking.
Heb onderbrekingspunten ingevoerd, maar hij loopt telkens netjes door. Kijk in de tabel, slaat hij alles op, behalve de nevenwerking.

Voor de gemakkelijkheid heb ik de namen van de checkboxen al veranderd (gebaseerd op de naamgeving van andere boxen die wél worden opgeslagen!), de 'keuze' heb ik weggelaten, dus heb ik nu niet meer
keuzeA1, keuzeB1 maar simpelweg A1, B1...

de volgende code
Code:
                For Each ctl In Controls
                      With ctl
                      Select Case .ControlType
                          Case acCheckBox
                              If .Value = -1 Then
                                  sNevenwerking = .Name
                                  sTabel = .Tag
                                  On Error Resume Next
                                  With CurrentDb.OpenRecordset("GegevensBehandelingNevenwerking")
                                      .AddNew
                                      ![Unieke code] = cmbCode
                                      ![Behandeling] = Me("cmbBehandeling" & i)
                                      ![Nevenwerking Behandeling] = Me("sNevenwerking" & i)
                                      .Update
                                      .Close
                                  End With
                              End If
                      End Select
                  End With
              Next ctl


maar helaas, ook dit werkt nog niet... Het record wordt gemaakt, maar 1 veld ontbreekt...
 
En deze msgbox doet het dan ook?
Zo ja, wat geeft-ie als resultaat?
Code:
With CurrentDb.OpenRecordset("GegevensBehandelingNevenwerking")
    .AddNew
    ![Unieke code] = cmbCode
    ![Behandeling] = Me("cmbBehandeling" & i)
Msgbox Me("sNevenwerking" & i).Value
    ![Nevenwerking Behandeling] = Me("sNevenwerking" & i)
    .Update
    .Close
End With
 
Maar als je een onderbrekingspunt instelt op <With CurrentDb.OpenRecordset("GegevensBehandelingNevenwerking")> dan loopt-ie wel door alle regels heen? Vreemd.... Misschien als je de Msgbox boven de With Currentdb.... zet?
 
Doe me een lol, en zet 'm maar op de mail.... Dat kijkt denk ik een stuk sneller!
 
Ok! het zal wel voor vanavond zijn dan :) Hier op het werk kan ik niet comprimeren en dat soort dinge!
Alvast bedankt!
 
Het lijkt mij dat het inderdaad fout gaat met sNevenwerking. Dit is namelijk een string-variabele, terwijl je met de codegedeelte Me("sNevenwerking" & i), niet de variabele aanroept maar gewoon een tekststring. Haal daarom de dubbele aanhalingstekens bij sNevenwerking eens weg en probeer het dan nog eens.

Rebmog
 
De stringvariable moet inderdaad zonder quootjes worden aangeroepen. Daarnaast wordt het getal dubbel geplaatst. De code moet waarschijnlijk zijn: Me(sNevenwerking).
 
Nog 1 aanpassing nodig...

Amai Amai ...
met al jullie hulp, ben ik al een heel stuk verder in mijn probleem.

De gegevens worden mooi opgeslaan, alleen heb ik nu nog 1 probleempje.
De naam van de nevenwerking wordt niet opgeslaan, maar wel letterlijk de waarde van het keuzevakje, namelijk "-1" :)

Hieronder de code! Het desbetreffende stukje zet ik schuin en rood !!


Code:
Private Sub cmdVerder_Click()
Dim i As Integer
Dim sTabel As String, sPatient As String, sBehandeling As String, strSQL As String
Dim dtDatum As Date, iDatum As Double
Dim bCheck As Boolean
Dim lResponse As Integer
sTabel = "GegevensBehandeling"

If cmbCode = "" Then
MsgBox ("Vul de unieke code in aub")
Exit Sub

ElseIf Nz(cmbBehandeling1, "") = "" Then
MsgBox ("Vul de behandeling in aub")
Exit Sub

ElseIf Nz(cmbBehandeling1, "") <> "" And Nz(cmbCode, "") <> "" Then

lResponse = MsgBox("Weet u zeker dat u wilt verder gaan?", vbYesNo)

If lResponse = No Then
Exit Sub

Else
    For i = 1 To 4
        If Me("cmbBehandeling" & i) <> "" Then
            On Error Resume Next
            sPatient = Me.cmbCode
            sBehandeling = Me("cmbBehandeling" & i)
            dtDatum = Me("txtStart1" & i)
            iDatum = CDbl(dtDatum)
            Dim tmp
            strSQL = "SELECT DISTINCT [Unieke Code], [Type behandeling], [1ste startdatum] FROM " & sTabel & vbCrLf _
                & "WHERE (" _
                & "[Unieke Code] = '" & sPatient & "'" & vbCrLf _
                & "AND [Type behandeling] = '" & sBehandeling & "'" & vbCrLf _
                & "AND CDbl([1ste startdatum]) = " & iDatum _
                & ")"
''                tmp = InputBox("", "", strSQL)
            With CurrentDb.OpenRecordset(strSQL)
                If .RecordCount > 0 Then
                    bCheck = True
                Else
                    bCheck = False
                End If
                .Close
            End With
            
            If bCheck = False Then
                With CurrentDb.OpenRecordset(sTabel)
                    .AddNew
                    ![Unieke code] = Me.cmbCode
                    ![Type behandeling] = Me("cmbBehandeling" & i)
                    ![Dosis] = Me("txtDosis" & i)
                    ![1ste startdatum] = Me("txtStart1" & i)
                    ![1ste stopdatum] = Me("txtStop1" & i)
                    ![2de startdatum] = Me("txtStart2" & i)
                    ![2de stopdatum] = Me("txtStop2" & i)
                    ![3de startdatum] = Me("txtStart3" & i)
                    ![3de stopdatum] = Me("txtStop3" & i)
                    ![Extra] = Me("txtExtra" & i)
                    .Update
                    .Close
                End With
                
[COLOR="red"][I]                [B]For Each ctl In Controls
                      With ctl
                      Select Case .ControlType
                          Case acCheckBox
                                If .Value = -1 Then
                                  sNevenwerking = .Name
                                  sTabel = .Tag
                                  On Error Resume Next
                                  With CurrentDb.OpenRecordset("GegevensBehandelingNevenwerking")
                                      .AddNew
                                      ![Unieke code] = cmbCode
                                      ![Behandeling] = Me("cmbBehandeling" & i)
                                      ![Nevenwerking Behandeling] = Me(sNevenwerking)
                                      .Update
                                      .Close
                                  End With
                              End If

                      End Select
                  End With
              Next ctl[/B][/I][/COLOR]
           End If
        End If
    Next i
MsgBox ("Gegevens opgeslagen")


End If
End If
DoCmd.Close acForm, "F_InvoerenGegevensBehandeling"
DoCmd.OpenForm "Startformulier"

End Sub
 
Als je de naam van het selectievakje wilt opslaan, is dit voldoende:
![Nevenwerking Behandeling] = sNevenwerking
Dit omdat je eerder de Naam hebt toegewezen met .Name. Met Me(sNevenwerking) kijk je naar de waarde van het veld.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan