Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Составное имя переменной: "Текст" & число / 7 сообщений из 7, страница 1 из 1
23.08.2013, 10:36
    #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
23.08.2013, 11:37
    #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
23.08.2013, 13:07
    #38375748
Valll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составное имя переменной: "Текст" & число
Принял. Спасибо
...
Рейтинг: 0 / 0
24.08.2013, 08:35
    #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
24.08.2013, 11:44
    #38376477
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составное имя переменной: "Текст" & число
Привет, Valll!
Valll
Код: vbnet
1.
здесь выдаёт ошибку 9

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

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


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