Я пытаюсь обновить регулярно используемый код, разработанный предыдущим сотрудником, чтобы сделать его более эффективным.
Код работает нормально, но предлагает пользователю ввести «PlateID» в каждом цикле. Это было разработано, когда работнику нужно было вводить только одну или две пластины, теперь у нас есть люди, которые вводят более 30-40, что убивает производительность (не только огромный риск для ошибки пользователя).
Что яхотел бы вместо того, чтобы каждый раз запрашивать у пользователя PlateID, вместо этого делать ввод списка или даже просто брать список из таблицы.
Цель этого кода - взять информацию о Plate, которую мы получаем из лабораторного оборудованияи преобразовать его в формат, который мы можем использовать в лаборатории.
Я попытался изменить запрос 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 = InputBox ("Enter Plate") - это ключевая область для поиска изменений