2013-07-16 39 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 
相關問題