Vba 如何将循环输入更改为从access接受列表或表输入的输入?

Vba 如何将循环输入更改为从access接受列表或表输入的输入?,vba,ms-access,Vba,Ms Access,我正在尝试更新以前员工设计的常规代码,以提高效率 代码工作正常,但提示用户在每个循环中输入一个“平板”。这是在一个工人只有一两个盘子要输入的时候发展起来的,现在我们有人输入超过30-40个盘子,这会降低生产率(不仅仅是用户出错的巨大风险) 我想做的不是每次向用户查询PlateID,而是获取列表输入,甚至只是从表中获取列表 此代码的目的是获取我们从实验室设备接收到的板材信息,并将其转换为我们可以在实验室中使用的格式 我曾尝试更改qrySamplesOnPlates查询,使其具有作为列表的条件,但它

我正在尝试更新以前员工设计的常规代码,以提高效率

代码工作正常,但提示用户在每个循环中输入一个“平板”。这是在一个工人只有一两个盘子要输入的时候发展起来的,现在我们有人输入超过30-40个盘子,这会降低生产率(不仅仅是用户出错的巨大风险)

我想做的不是每次向用户查询PlateID,而是获取列表输入,甚至只是从表中获取列表

此代码的目的是获取我们从实验室设备接收到的板材信息,并将其转换为我们可以在实验室中使用的格式

我曾尝试更改qrySamplesOnPlates查询,使其具有作为列表的条件,但它似乎被代码覆盖,即使我注释掉输入框。我知道这可能真的很简单,只是让我的头在里面

    Sub PCRSplit(OutputLoc As String)


    Dim objConn As New ADODB.Connection
    Dim objCmd As New ADODB.Command
    Dim LabID As String
    Dim db As DAO.Database
    Dim tblRst As DAO.Recordset
    Dim PlateID As Integer
    Dim Rst1 As New ADODB.Recordset
    Dim AryWellLetter, AryLayoutFullPlate, AryLayoutWell, SampleID, WellNumber, RowNumber, WellLetter
    Dim varAnswer As Variant
    Dim exRst As ADODB.Recordset
    Dim UserName As String
    Dim ProjectName As String
    Dim ExperimentName As String
    Dim Manifest As String
    Dim manRst As ADODB.Recordset
    Dim ControlPos As String
    Dim Counter As Integer


        If objConn = "" Then
            Set objConn = GetNewConnection
            objCmd.ActiveConnection = objConn
        End If

    On Error GoTo errHandler

    'delete everything out of the table that sample ID's get written to
    objCmd.CommandText = "qrySamplesOnPlatesDELETE"
    objCmd.CommandType = adCmdStoredProc
    objCmd.Parameters.Refresh
    objCmd.Execute

    'LabID is a criteria for the query that pulls out plate information
    LabID = InputBox("Enter Lab")

    'open the table that sample ID's get written to
    Set db = CurrentDb
    Set tblRst = db.OpenRecordset("SamplesOnPlates")

    Do

    'PlateID is a criteria for the query that pulls out plate information
    PlateID = InputBox("Enter Plate")

    'run the query to pull download pre-formatted plate information and assign it to the variable Rst1
    objCmd.CommandText = "qrySamplesOnPlates"
    objCmd.CommandType = adCmdStoredProc
    objCmd.Parameters.Refresh
    Set Rst1 = objCmd.Execute(, Array(LabID, PlateID))

    'whole bunch of data transformation lines (dont worry about this)
    For i = 1 To 96
    AryWellLetter = Array("PlaceHolder", "A", "B", "C", "D", "E", "F","G", "H", "I", "J", "K", "L", "M", "N", "O", "P")
    AryLayoutFullPlate = Split(Rst1.Fields("Layout").Value, "][")
    AryLayoutWell = Split(AryLayoutFullPlate(i), ",")
    SampleID = AryLayoutWell(2)
    ControlPos = AryLayoutWell(3)
    If Len(AryLayoutWell(1)) = 1 Then WellNumber = "0" & AryLayoutWell(1) Else WellNumber = AryLayoutWell(1)
    RowNumber = AryLayoutWell(0)
    WellLetter = AryWellLetter(RowNumber)
    With tblRst
    .AddNew
    .Fields("SampleID") = SampleID
    .Fields("Well") = WellLetter & WellNumber
    .Fields("PlateID") = PlateID
    .Fields("LabID") = LabID
    .Fields("ControlPos") = ControlPos
    .Update

    End With

    Next

    'this will loop through the above code and continue to add new plates to the SamplesOnPlates table until the user clicks No button

    varAnswer = MsgBox("Do you want to enter another plate?", vbYesNo)

    Loop Until varAnswer = 7

    tblRst.Close

    'more transformation after this that isnt relevant

PlateID=输入框(“输入板”)是查看更改的关键区域

使用表格和表单输入新板。然后修改查询以加入此表并一次性附加所有板材。完成后,删除新车牌或将其标记为已注册。谢谢,这是一种可行的方法。对于阅读本文的其他人,我使用了Eddie/Simple Sandman详述的方法。我基本上是逐字复制它,并将我的转换和附加代码插入到“Do-Until”循环中,该循环只是在表中循环。