#vba #ms-access
#vba #ms-access
Вопрос:
Я пытаюсь объединить две подстроки в одну, которая определяет целочисленную переменную.
Пример:
Dim ACTGPA as Integer
Dim ACTGPB as Integer
Dim ACPrio as Integer
ACTGPA = 5
ACTGPB = 10
После большого количества кода у меня есть цикл, который выбирает значение из набора записей, содержащего числовой столбец с именем «TGP_A» или «TGP_B».
Set rs4 = db.OpenRecordset("SELECT * FROM tbl_Syllabus WHERE Mis_Name = '" amp; strMisName amp; "'")
Dim item As Variant
For Each item In rs4.Fields
If item.Name = "TGP_A" Or item.Name = "TGP_B" Then
If Nz(rs4(item.Name).Value, "") > 0 Then
If strACCon1 = "" Then
strACCon1 = item.Name
End If
End If
End If
Next item
Я хочу установить для значения ACPrio значение ACTGPA или ACTGPB, в зависимости от того, какое имя элемента выбрано в цикле.
Используя replace, я удаляю _ из имени элемента, чтобы определить ACTGPA (или B).
Я получаю
«Ошибка 13, несоответствие типов»
в следующей строке. Вероятно, потому, что он думает, что я пытаюсь установить ACPrio (целое число) на что-то, что является строкой, но я пытаюсь записать целое число ACTGPA (или ACTGPB).
ACPrio = "AC" amp; Replace(strACCon1, "_", "")
Должно быть таким же, как это:
ACPrio = ACTGPA 'eg. settings the ACPrio value to that of ACTGPA (or ACTGPB), which is 5 (or 10).
Комментарии:
1. Вы не можете назначить имя переменной, вычисленное из строки. Я бы предложил использовать коллекцию для хранения значений и, таким образом, сделать их доступными по имени во время выполнения. Сейчас я подготовлю для вас ответ с примером.
Ответ №1:
Вы не можете использовать строку для ссылки на переменную (или ее значение) по имени.
Но вы можете добавить необходимые значения в коллекцию с их именем, а затем получить к ним доступ позже по имени, как в этом примере:
Public Sub Sample()
Dim ACTGPA As Integer
Dim ACTGPB As Integer
Dim ACPrio As Integer
ACTGPA = 5
ACTGPB = 10
' Prepare the collection by adding the values with their name:
Dim col As Collection
Set col = New Collection
col.Add 5, "ACTGPA"
col.Add 10, "ACTGPB"
Dim strACCon1 As String
' Set for testing to "TGP_A":
strACCon1 = "TGP_A"
ACPrio = col("AC" amp; Replace(strACCon1, "_", ""))
Debug.Print ACPrio
' Set for testing to "TGP_B":
strACCon1 = "TGP_B"
ACPrio = col("AC" amp; Replace(strACCon1, "_", ""))
Debug.Print ACPrio
End Sub
Вывод
5
10
И, может быть, вы можете опустить переменные ACTGPA
и ACTGPB
вообще сейчас, если это соответствует вашей концепции и общему коду.