2016-06-02 7 views
1

Привет, я новичок в программировании vba. У меня есть три текстовых поля с меткой txtDept1, txtDept2 и txtDept3. что я хочу, чтобы выбрать обусловливаться целочисленного (к)изменить имя переменной условно

Private Sub test() 
Dim txtDept1, txtDept2, txtDept3, Testval As String 
Dim k As Integer 
txtDept1 = "Chem" 
txtDept2 = "Biol" 
txtDept3 = "Phys" 
k = 1 
Testval = Evaluate("txtDept" & CStr(k)) 
MsgBox (Testval) 
End Sub 
+1

Непонятно, что именно вы хотите знать. [ask] –

+0

, вы можете добавить более подробную информацию о своей фактической цели. Имеются ли текстовые поля в пользовательской форме или в листе? в этом последнем случае это элементы управления «ActiveX» или «Form»? Являются ли «txtDept1», ecc .. фактическими именами управления (те, которые вы можете видеть в свойстве «Имя») или просто метки, помещенные под каждым из них? – user3598756

+0

Обратите внимание, что в VBA вы не объявляете кучу переменных, как и для вашего 'TxtDept1-3', которые в вашем коде объявлены как варианты. –

ответ

1

Вы могли бы рассмотреть возможность использования массива вместо:

Option Base 1 

Private Sub test() 

Dim txtDept As Variant, Testval As String 
Dim k As Integer 

txtDept = Array("Chem", "Biol", "Phys") 

k = 1   'the first from the above array elements 

Testval = txtDept(k) 

MsgBox (Testval) 

End Sub 

Важно: не забудьте включить выше Option Base 1 в ваше код при копировании. Это связано с тем, что VBA обычно начинает подсчитывать элементы в массиве, начиная с 0. Итак, 0 будет (в вашем случае) Chem и Biol будет 1. С Option Base 1 вы сообщаете VBA, чтобы начать подсчет с 1 и вы получите правильный результат.

+0

Массивы основаны на нулевом значении практически в каждом отдельном языке. «База Option 1» - одна из тех функций «помочь новичкам», которые фактически препятствуют надлежащему обучению ИМО. Но +1 для ответа на довольно неясный вопрос. –