MS Access VBA boucle par le biais de la liste

Je pense que cela devrait être simple, mais je ne peux pas trouver la bonne façon de le faire. J'ai quelques exemples de la situation, je suis en train de résoudre, donc je vais décrire à la fois. Je pense qu'ils peuvent être traités avec la même solution, mais si non, laissez-moi savoir. Je suis en train de faire une boucle par une liste de valeurs, et d'exécuter une requête SQL pour chacun. Dans une situation donnée, les valeurs sont de type texte, et dans l'autre, ils sont non-séquentielle des entiers.

Édité à ajouter: j'aurais dit que la liste de valeurs est dynamique, il est à venir à partir de la liste de valeurs d'ID sélectionné dans une liste déroulante. Maintenant, ceux-ci sont stockés comme une liste délimitée par des virgules dans ma variable nommée item_in_my_text_list et item_in_my_ID_list ci-dessous.

Quelque chose comme ceci:

item_in_my_text_list = "User-defined, mean, upper-bound"
For Each item_in_my_text_list(i)
    'run a query where i is part of the condition
    'I want to run the same query first the user-defined metric, then for the mean, then for the upper-bound
    'SQL should be "select metric, age, value into scenario where metric = 'user-defined'"
          SQL= "Select metric, age, value  into scenario WHERE metric = [i]
      DoCmd.SetWarnings False

          DoCmd.RunSQL SQL

          DoCmd.SetWarnings True

          SQL = ""
          rs.MoveNext

Loop

L'autre situation implique un non-numérique séquentiel liste de valeurs d'ID:

item_in_my_ID_list = "7, 9, 15, 88"
For Each item_in_my_ID_list(i)
    'run a query where i is part of the condition
    'I want to run the same query first for 7, then for 9, then 15, and so on
          SQL= "Update thistable set x = y where ID = " & [i]
      DoCmd.SetWarnings False

          DoCmd.RunSQL SQL

          DoCmd.SetWarnings True

          SQL = ""
          rs.MoveNext

Loop

Quelle est la bonne syntaxe pour la mise en place de la boucle? Lorsque j'essaie d'utiliser Split, il me semble qu'il me donne le nombre d'éléments dans la liste, donc, lorsque j'essaie d'utiliser [i] dans le cadre de la condition de requête, j'obtiens, 1, 2, 3 (en fonction du nombre d'éléments dans la liste), plutôt que d'être "défini par l'utilisateur" ou la bonne valeur de l'ID.

Édité pour ajouter ma solution. La suggestion de @mehow m'a donné ce dont j'avais besoin pour faire ce travail.

Set db = CurrentDb
'Delete records for algorithms that aren't selected

    Dim DeleteSQL As String
    DeleteSQL = "Delete from Scenario WHERE ID not in (" & Me.ListSelect & ")"

    db.Execute DeleteSQL, dbFailOnError

    DeleteSQL = ""

'for each of the IDs selected, copy the whole scenario
Dim i As Long
For i = 0 To UBound(Split(Me.ListSelect, ","))
    'find the records from the scenario table, and copy them for the "upper bound"
    SQL = "insert into scenario (a, b, c)"
    SQL = SQL & " SELECT a, b, c
    SQL = SQL & " FROM Scenario "
    SQL = SQL & " WHERE Scenario.Id= " & Trim(Split(Me.ListSelect, ",")(i)) 

    db.Execute SQL, dbFailOnError
    SQL = ""

    'reset user-defined values for both mean and upper bound
    Dim allMetrics As String
    allMetrics = "Central tendency, Upper bounding"

    Dim thisMetric As Long
    For thisMetric = 0 To UBound(Split(allMetrics, ","))
         Dim rs As DAO.Recordset
         Set rs = CurrentDb.OpenRecordset("SELECT Parameter FROM AllParameters WHERE Id= " & Trim(Split(Me.ListSelect, ",")(i)))

         Dim DefaultSQL As String
         If Not (rs.EOF And rs.BOF) Then
             Do Until rs.EOF = True
                DefaultSQL = "UPDATE defaults LEFT JOIN scenario ON defaults.Age = Scenario.Age SET Scenario." & rs("Parameter") & " = [defaults].[Value] "
                DefaultSQL = DefaultSQL & " WHERE defaults.ID =" & Trim(Split(Me.ListSelect, ",")(i))
                DefaultSQL = DefaultSQL & " And defaults.metric = '" & Trim(Split(allMetrics, ",")(thisMetric)) & "'"


                db.Execute DefaultSQL, dbFailOnError
                DefaultSQL = ""
                rs.MoveNext
             Loop

         End If

         rs.Close
         Set rs = Nothing
    Next
Next
InformationsquelleAutor kvibbertj | 2014-03-03