我的變量: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