powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Составное имя переменной: "Текст" & число
7 сообщений из 7, страница 1 из 1
Составное имя переменной: "Текст" & число
    #38375519
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется вот такой макрос:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Sub AAAAA()
    Dim Target
    Dim M1
    Dim M2
    Dim M3
    Dim a
    Dim d
    
    M1 = Array("", "BQ33", "X19", "AI19", "", "D75", "D89", "AT19", "BQ19", "CB19", "CM19")
    M2 = Array("", "BQ33", "X19", "AI19", "", "D75", "D89", "AT19", "BQ19", "CB19", "CM19")
    M3 = Array("", "BQ33", "X19", "AI19", "", "D75", "D89", "AT19", "BQ19", "CB19", "CM19")
    
    Target = 1 ' (или 2 или 3)
   
    d = "M" & Target ' здесь я пытаюсь сослаться на переменную
    a = Sheets("Значения").Range(d(2)) ' здесь выдаёт ошибку 13
    a = Sheets("Значения").Range(M1(2)) '  а так без ошибки, но мне так не надо

End Sub



По задумке хотелось, чтобы в переменную "а" вставлялось значение из одного из трёх массивов, в зависимости от переменной Target. Пока ничего не получается.

Видимо всё упирается в невозможность VBA интерпретировать составную переменную "М" & 1 в объявленную переменную M1

Буду благодарен за совет как решить мою задачку. Спасибо.
...
Рейтинг: 0 / 0
Составное имя переменной: "Текст" & число
    #38375603
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valll,

VBA и не будет никогда интерпретировать все Ваши вольности как Вам хочется. Символ конкантенации амперсанд применяется только с текстом. Значит на выходе тоже будет текст. Используйте условные конструкции:
Код: vbnet
1.
2.
3.
4.
5.
Select Case Target
Case 1: d = M1
Case 2: d = M2
Case 3: d = M3
End Select


Или массив в массиве:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub AAAAA()
    Dim Target,M1,M2,M3,a,d
    Dim avTmp
    
    M1 = Array("", "BQ33", "X19", "AI19", "", "D75", "D89", "AT19", "BQ19", "CB19", "CM19")
    M2 = Array("", "BQ33", "X19", "AI19", "", "D75", "D89", "AT19", "BQ19", "CB19", "CM19")
    M3 = Array("", "BQ33", "X19", "AI19", "", "D75", "D89", "AT19", "BQ19", "CB19", "CM19")
    avTmp = array(M1, M2, M3)
    
    Target = 1 ' (или 2 или 3)
   
    d = avTmp(Target-1) ' здесь я пытаюсь сослаться на переменную
    a = Sheets("Значения").Range(d(2)) ' здесь выдаёт ошибку 13
    a = Sheets("Значения").Range(M1(2)) '  а так без ошибки, но мне так не надо

End Sub
...
Рейтинг: 0 / 0
Составное имя переменной: "Текст" & число
    #38375748
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Принял. Спасибо
...
Рейтинг: 0 / 0
Составное имя переменной: "Текст" & число
    #38376418
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал, выдаёт ошибку 9.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Sub AAAAA()
    Dim Target
    Dim M1
    Dim M2
    Dim M3
    Dim a
    Dim d
    
    M1 = Array("", "BQ33", "X19", "AI19", "", "D75", "D89", "AT19", "BQ19", "CB19", "CM19")
    M2 = Array("", "BQ33", "X19", "AI19", "", "D75", "D89", "AT19", "BQ19", "CB19", "CM19")
    M3 = Array("", "BQ33", "X19", "AI19", "", "D75", "D89", "AT19", "BQ19", "CB19", "CM19")
    
    Target = 1
    
    Select Case Target
        Case 1: d = M1
        Case 2: d = M2
        Case 3: d = M3
    End Select
    
    a = Sheets("Значения").Range(d(3)) ' здесь выдаёт ошибку 9, хотя при наводе мышки высвечивает правильный результат "AI19"
    
    
End Sub



Крайне не хочется указывать реальные ссылки на ячейки - общий код резко растёт в размере. Может есть ещё какие мысли как подставить ссылку на ячейку из массива в зависимости от Target?
...
Рейтинг: 0 / 0
Составное имя переменной: "Текст" & число
    #38376477
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет, Valll!
Valll
Код: vbnet
1.
здесь выдаёт ошибку 9

а у меня не выдает, что я делаю не так? Может файлик приложишь?
...
Рейтинг: 0 / 0
Составное имя переменной: "Текст" & число
    #38376490
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker Pro , спасибо за участие. Подготовил для тебя отдельный файл, проверил - заработало... Буду разбираться.
...
Рейтинг: 0 / 0
Составное имя переменной: "Текст" & число
    #38376498
Valll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашёл свою ошибку. Небрежность: листа "Значение" - у меня не было.... Подставил настоящее имя - всё заработало.

Всем спасибо.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Составное имя переменной: "Текст" & число
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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