我的变量:answer_a, answer_b, answer_c, question_letter
使用变量A的值来获得变量B
变量question_letter
由用户设定。根据他们是否输入a
,b
或c
,我想分别获得answer_a
,answer_b
或answer_c
。
因为以后会有明显多于三个answer_
变量,所以我想要这样做:answer_ & question_letter
,但是这不能编译。
我该怎么做?谢谢!
我的变量:answer_a, answer_b, answer_c, question_letter
使用变量A的值来获得变量B
变量question_letter
由用户设定。根据他们是否输入a
,b
或c
,我想分别获得answer_a
,answer_b
或answer_c
。
因为以后会有明显多于三个answer_
变量,所以我想要这样做:answer_ & question_letter
,但是这不能编译。
我该怎么做?谢谢!
有几种方法可以做到这一点。一个可能是使用一个case语句:
Select Case question_letter
Case a
code
Case b
more code
Case else
code if nothing matches
End Select
现在,如果您使用数据库来存储问题编号,字母和答案对,那么您可以查询数据库并返回您想要的内容。 – KFleschner
一个简单的解决方案是一个数组:
Dim answer() as String ' An empty array
ReDim answer(1 to 3) ' Set the array to 3 "cells"
Dim ansReturn as String
...
Select Case question_letter
case "a"
ansReturn = answer(1)
case "b"
ansReturn = answer(2)
case "c"
ansReturn = answer(3)
case else
ansReturn = ""
End Select
您可以设置阵列为任意(正整数)的大小。
工具 - >参考和添加Microsoft脚本运行时间。这将允许您使用将一个ket与一个值相关联的字典;
Private answers As Dictionary
Sub callMeAtStartup()
'// setup answers
Set answers = New Dictionary
answers.Add "a", "111"
answers.Add "b", "222"
answers.Add "c", "333"
End Sub
Function lookup(char As String) As String
If answers.Exists(char) Then lookup = answers(char)
End Function
Sub test()
callMeAtStartup
'....
Dim answer As String
answer = lookup("f")
If Len(answer) Then MsgBox "Its " & answer
End Sub
至于26点的选择或更少映射信到数组索引的替代
dim answers(3) as String
answers(0) = "111" '//a
answers(1) = "222"
answers(2) = "333" '//c
question_letter = "b"
'//char to index
index = asc(ucase$(question_letter)) - 65
if index < ubound(answers) Then
msgbox answers(index)
end if
最好的办法是可能使用的阵列(和计算依赖于用户输入的索引)或字典将用户输入与其他一些变量进行映射。 – assylias
有没有什么办法可以做一些像“answer_&question_letter”这样的事情? – Human
无法在VBA中执行动态变量名称 – dennythecoder