powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Есть ли способ сослаться на переменную по ее имени? (см. внутри)
21 сообщений из 21, страница 1 из 1
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #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
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32454384
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прогрессивное человечество давным давно придумало массивы
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32454398
Alex112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отношусь к той части человечества, которая о массивах знает и их использует :).

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

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


не работает. И по-моему это правильно.
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32454453
Julius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eval тут вряд ли поможет - она только выражения вычисляет, но никому и ничего не присваивает.
Можно, конечно, динамически текст функции менять, но это тоже есть извращение, хотя VBA такое и позволяет.
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #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
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32454500
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гоню
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32454502
Julius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так от тож...
Переменные там не очень-то "видны".
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32454515
Alex112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ЛП

Не, это тоже не работает. То есть присвоения внешней пременной таким способом не происходит. Только что проверил.
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32454543
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсть ли способ сослаться на переменную по ее имени?
В чистом виде, я думаю, не получится...
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32455520
PaulB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
используйте switch
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32455834
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Если бы это были не переменные, а контролы на форме, было бы легче.
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32455868
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли бы это были не переменные, а контролы на форме, было бы легче.
Для формы или для модуля класса можно сослаться на объявленные в них Public переменные по их именам, используя CallByName (по моему)
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #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
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32456600
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А для стандартного модуля никак?
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32456741
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для стандартного модуля CallByName не прокатит
В 97-м аксесе тоже не прокатит.
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32457711
В 97-м, полагаю, тоже прокатит, если вместо отсутствующей там функции CallByName написать свою, вызывая в ней функции из библиотеки TLI (TLBINF32.DLL). Мне пришлось так сделать - меня стандартная функция CallByName не устраивала - в её реализации, увы, есть ошибки. Кода совсем немного, единственное неудобство - ещё одна ссылка в References.
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32457716
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А есть ли возможность написать эту свою функцию так, чтобы она работала и для обычных (не объектных) переменных?
...
Рейтинг: 0 / 0
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #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
Есть ли способ сослаться на переменную по ее имени? (см. внутри)
    #32457726
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА есть ли возможность написать эту свою функцию так, чтобы она работала и для обычных (не объектных) переменных?

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


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