Страницы: 1
RSS
Обращение к переменной
 
Добрый день!

Пример:

adr1 = Range("год1").Adress   ' есть ряд переменных различающихся только по номеру
adr2 = Range("год2").Adress
adr3 = Range("год3").Adress
adr4 = Range("год4").Adress
adr5 = Range("год5").Adress

For i = 1 To 5   ' есть цикл, который обращается к этим переменным

Range(adr & i).Select

Next i

Excel выдает ошибку.

Подскажите, пожалуйста, как правильно написать "adr & i" чтобы Excel выбрал именно эту ячейку.
 
Range("год" & i)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist пишет:
Range("год" & i)

Это понятно... смысл в том, что эти переменные фиксируют адреса ячеек, после чего добавляются строки и, соответственно, адреса ячеек "Год1,2,3,4,5" изменяются. Мне надо чтобы Excel вставал именно в "старые" адреса после перемещения.
 
Тогда только через массивы:
Код
Dim asAddr(1 to 5)
asAddr(1) = Range("год1").Adress
asAddr(2) = Range("год2").Adress 
asAddr(3) = Range("год3").Adress 
asAddr(4) = Range("год4").Adress 
asAddr(5) = Range("год5").Adress
For i = 1 To 5
     Range(asAddr(i)).Select 
Next i
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Супер! Все работает!Спасибо!
 
Еще есть вопрос:

Можно ли ввести переменную в интервал массива? Вместо 5 в "Dim asAddr(1 to 5)" поставить Max, которая, в свою очередь будет ссылаться по значение из ячейки?

Пример:

Max = Range("Макс")  .Value

Dim asAddr(1 to Max)

For i = 1 To Max
asAddr(i) = Range("год" & i).Address
Next i

For e = 1 To Max
Range(asAddr(e)).Select
Next e

Excel выдает на это ошибку...
Изменено: Дмитрий Киселев - 11.01.2013 15:49:56
 
Т.к. Мах это функция VBA переименуйте вашу переменную например в MaxR
Изменено: sva - 11.01.2013 16:00:51
 
Цитата
sva пишет:
Т.к. Мах это функция VBA переименуйте вашу переменную например в MaxR

Я ее уже как только не переименовывал, все-равно выдает ошибку :(
 
попробуйте так
Код
Dim asAddr(), lMax as Long
lMax = Range("Макс") .Value 
redim asAddr(1 to lMax)
....
 
Код
Max = Range("Макс").Value 
Dim asAddr() 
asAddr = Range("Макс").Value 

For e = 1 To uBound(asAddr,1) 
    Range(asAddr(e,1)).Select 
Next e
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Можно собирать эти адреса в словарь, как ключ брать например номер счётчика, в Item класть адрес. Максимальный размер "массива" не важен.
Затем по ключу в любой момент получаете адрес.
Изменено: Hugo - 11.01.2013 17:51:03
 
Цитата
nilem пишет:
попробуйте так
Код
 Dim asAddr(), lMax as Long
lMax = Range("Макс") .Value 
redim asAddr(1 to lMax)
.... 

Работает, спасибо!
 
По первому вопросу, можно без переменных:
For Each x In Names
Range(x).Select
Next
Страницы: 1
Наверх