2013-07-16 41 views
0

我的变量:answer_a, answer_b, answer_c, question_letter使用变量A的值来获得变量B

变量question_letter由用户设定。根据他们是否输入a,bc,我想分别获得answer_a,answer_banswer_c

因为以后会有明显多于三个answer_变量,所以我想要这样做:answer_ & question_letter,但是这不能编译。

我该怎么做?谢谢!

+1

最好的办法是可能使用的阵列(和计算依赖于用户输入的索引)或字典将用户输入与其他一些变量进行映射。 – assylias

+0

有没有什么办法可以做一些像“answer_&question_letter”这样的事情? – Human

+0

无法在VBA中执行动态变量名称 – dennythecoder

回答

0

有几种方法可以做到这一点。一个可能是使用一个case语句:

Select Case question_letter 
    Case a 
     code 
    Case b 
     more code 
    Case else 
     code if nothing matches 
End Select 
+0

现在,如果您使用数据库来存储问题编号,字母和答案对,那么您可以查询数据库并返回您想要的内容。 – KFleschner

0

一个简单的解决方案是一个数组:

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 

您可以设置阵列为任意(正整数)的大小。

0

工具 - >参考和添加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 
相关问题