Как я могу получить ссылку на переменную, используя строку в VBA? - PullRequest
5 голосов
/ 11 июля 2011

У меня есть переменная strFunction, затем у меня есть другая строка strName = "strFunction", я хочу знать, как я могу получить значение strFunction с помощью strName.

Например, что-то вроде getValue (strName) дает мне значение strFunction. Возможно ли это в Access VBA?

Спасибо!

EDIT:

У меня есть строка strFunction, это константная строка. В моем коде я хочу использовать Len("strFunction"), чтобы проверить его длину, но я получил длину "strFunction". Поэтому мне нужна функция get-value-out-of-variable-name. Я пробовал Eval (), но он не может этого сделать, даже если я пишу get_strFunction(), eval("get_strFunction()") выдает ошибку, сообщая, что не может ее найти.

Private Const strFunction as String = "FilterByType_1"
Private Function get_strFunction()
    get_strFunction = strFunction
End Function

Ответы [ 2 ]

2 голосов
/ 11 июля 2011

" У меня есть переменная strFunction, затем у меня есть другая строка strName =" strFunction ", я хочу знать, как я могу получить значение strFunction с помощью strName. "

Вместо переменной strFunction может быть ключом для элемента в коллекции VBA.

Public Sub darkjh()
    Dim strName As String
    Dim col As Collection
    Set col = New Collection
    col.Add "FilterByType_1", "strFunction"
    strName = "strFunction"
    Debug.Print col(strName)
    Set col = Nothing
End Sub

Редактировать : Вместо коллекции VBA вы можете использовать Scripting.Dictionary.

Dim strName As String
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
dict.Add "strFunction", "FilterByType_1"
strName = "strFunction"
Debug.Print dict(strName)
Set dict = Nothing
0 голосов
/ 11 июля 2011
Option Compare Database

Dim a As String
Dim b As String

Public Sub test()
    a = "b"
    b = "test-string"
    Debug.Print Eval("get" & a & "()")
End Sub

Public Function getB() As String
    getB = b
End Function

Вывод

>>test
test-string

eval(a) не работал, поэтому мне пришлось написать «getter» для переменной и оценить эту функцию: eval("get" & a & "()").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...