Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Есть ли способ сослаться на переменную по ее имени? (см. внутри) / 21 сообщений из 21, страница 1 из 1
24.03.2004, 11:03
    #32454374
Alex112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
Есть такая конструкция:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Select Case !Num
Case  1 
     SDate1 = Dt
Case  2 
     SDate2 = Dt
Case  3 
     SDate3 = Dt
Case  4 
     SDate4 = Dt
Case  5 
     SDate5 = Dt
End Select


Т.е. в зависимости от значения !Num, одной из переменных SDate1 ... SDate5 присваивается одно и тоже значение другой переменной (Dt).

Можно ли как-то сократить код и имя (ссылку на него) нужной переменной из списка SDate1 ... SDate5 формировать динамически? Что-то типа:

Код: plaintext
1.
Set НужнаяПеременная = ????? ( "SDate"  & !Num) ??????


А затем одной строкой заменить все указанные выше:

Код: plaintext
1.
НужнаяПеременная = Dt


как, например, это можно делать для коллекций?
...
Рейтинг: 0 / 0
24.03.2004, 11:06
    #32454384
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
прогрессивное человечество давным давно придумало массивы
...
Рейтинг: 0 / 0
24.03.2004, 11:12
    #32454398
Alex112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
Отношусь к той части человечества, которая о массивах знает и их использует :).

Но не подходят они для моего случая: пример в вопросе сильно упрощен. Только неделю назад точно видел на каком-то западном сайте способ, как это делать. Забыл на каком ...
...
Рейтинг: 0 / 0
24.03.2004, 11:13
    #32454402
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
Eval
...
Рейтинг: 0 / 0
24.03.2004, 11:25
    #32454433
Alex112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
Возможно, не совсем понял намек, но у меня такая конструкция:

Код: plaintext
Eval( "SDate"  & !Num) = Dt


не работает. И по-моему это правильно.
...
Рейтинг: 0 / 0
24.03.2004, 11:34
    #32454453
Julius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
Eval тут вряд ли поможет - она только выражения вычисляет, но никому и ничего не присваивает.
Можно, конечно, динамически текст функции менять, но это тоже есть извращение, хотя VBA такое и позволяет.
...
Рейтинг: 0 / 0
24.03.2004, 11:44
    #32454480
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
Код: plaintext
1.
2.
3.
4.
Eval  "трампампам(SDate"  & i &  ", "  & Dt &  ")" 

Public Function Трампампам(ByRef var As Long, ByVal value As Long)
    var = value
End Function
...
Рейтинг: 0 / 0
24.03.2004, 11:54
    #32454500
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
гоню
...
Рейтинг: 0 / 0
24.03.2004, 11:55
    #32454502
Julius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
Так от тож...
Переменные там не очень-то "видны".
...
Рейтинг: 0 / 0
24.03.2004, 12:04
    #32454515
Alex112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
2 ЛП

Не, это тоже не работает. То есть присвоения внешней пременной таким способом не происходит. Только что проверил.
...
Рейтинг: 0 / 0
24.03.2004, 12:14
    #32454543
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
авторЕсть ли способ сослаться на переменную по ее имени?
В чистом виде, я думаю, не получится...
...
Рейтинг: 0 / 0
24.03.2004, 18:00
    #32455520
PaulB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
используйте switch
...
Рейтинг: 0 / 0
24.03.2004, 22:30
    #32455834
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
Если бы это были не переменные, а контролы на форме, было бы легче.
...
Рейтинг: 0 / 0
24.03.2004, 23:20
    #32455868
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
авторЕсли бы это были не переменные, а контролы на форме, было бы легче.
Для формы или для модуля класса можно сослаться на объявленные в них Public переменные по их именам, используя CallByName (по моему)
...
Рейтинг: 0 / 0
24.03.2004, 23:49
    #32455886
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
Serge Gavrilov прав! К моему удивлению, прекрасно сработало следующее:

В форме "Test1":

Код: plaintext
Public TestVar as String


В любом месте программы:

Код: plaintext
1.
2.
3.
4.
5.
6.
Dim f As Form

Set f = Forms( "Test1" )

CallByName f,  "TestVar" , VbLet,  "MyValue" 

msgbox f.TestVar


А я, признаться, полагал, что такой трюк без написания процедуры Property Let не пройдёт...
...
Рейтинг: 0 / 0
25.03.2004, 12:33
    #32456600
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
А для стандартного модуля никак?
...
Рейтинг: 0 / 0
25.03.2004, 13:21
    #32456741
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
для стандартного модуля CallByName не прокатит
В 97-м аксесе тоже не прокатит.
...
Рейтинг: 0 / 0
25.03.2004, 21:19
    #32457711
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
В 97-м, полагаю, тоже прокатит, если вместо отсутствующей там функции CallByName написать свою, вызывая в ней функции из библиотеки TLI (TLBINF32.DLL). Мне пришлось так сделать - меня стандартная функция CallByName не устраивала - в её реализации, увы, есть ошибки. Кода совсем немного, единственное неудобство - ещё одна ссылка в References.
...
Рейтинг: 0 / 0
25.03.2004, 21:23
    #32457716
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
А есть ли возможность написать эту свою функцию так, чтобы она работала и для обычных (не объектных) переменных?
...
Рейтинг: 0 / 0
25.03.2004, 21:38
    #32457723
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
Боюсь, что нет, Владимир Саныч .

Внутри своей функции я фактически вызываю вот это:

Код: plaintext
Function InvokeHookArray(Object As Object, NameOrID, InvokeKind As InvokeKinds, ReverseArgList() As Variant)
Member of TLI.TLIApplication
Hook to IDispatch::Invoke. ID is Name or MemberID. Arguments in ReverseArgList must be listed backwards. ByRef args not supported.


То есть, так или иначе, эта библиотека имеет дело с объектами.
...
Рейтинг: 0 / 0
25.03.2004, 21:43
    #32457726
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
авторА есть ли возможность написать эту свою функцию так, чтобы она работала и для обычных (не объектных) переменных?

В общем случае - нет. И TLI, увы, не помогает.
Когда мне подобное понадобилось, мне пришлось писать анализатор текста модулей (конечно, для mde не работает, но мне нужен был add-in как раз для VBE).
Если это собственная программа, то легко все организовать через Select Case (как и приведено в первом письме).
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Есть ли способ сослаться на переменную по ее имени? (см. внутри) / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]