Страница 2 из 3
Re: Знатокам синтаксиса формул Excel VBA. Как написать формулу
Добавлено: 11 апр 2008, 10:59
Aent
Что то вы не то написали, дорогие товарищи.
1)результатом приведённого кода является инициализация массива sVar строковыми значениями из ранга, а вовсе не присваивание переменным, указанным
ViktorM.
2) даже в этом случае Split и прочее cовсем не нужны. Что мешает сразу определить массив
Array(-14,-13,...2)

3)Ранг можно прочитать в массив и непосредственно
Код: Выделить всё
Div v()
v = Range( ActiveCell.Offset(iзап, 0).Resize(, 9))
'Получается двумерный массив v(1,1), v(1,2),v(1,3) ....
Чем им удобнее оперировать чем просто ячейками я не понимаю
4) Разименования в VBA нет это всё таки не С++

Можно динамически переопределять имена листа
Но нельзя вычислять имя переменной VBA для левой части оператора присваивания
Re: Знатокам синтаксиса формул Excel VBA. Как написать формулу
Добавлено: 11 апр 2008, 11:35
VictorM
Aent,
Чем им удобнее оперировать чем просто ячейками я не понимаю
да, похоже Вы правы. Лишняя головная боль.
Re: Знатокам синтаксиса формул Excel VBA. Как написать формулу
Добавлено: 16 июн 2008, 21:35
VictorM
Здравствуйте, Уважаемые.
Опять "заклинило"

, прошу помощи.
Суть такова:
начальная яч. диапазона A5
конечную, правую нижнюю, нахожу так:
Range("A5").End(xlDown).Offset(0, 6).Select (Select - пока, временно) т.к. кол-во строк не знаю.
А теперь мне нужно этот дипазон скопировать.
Я написал конечно, но двумя строками с Select и чувствую, что коряво.
Понимаю, что можно определить диапазон для копирования одной строкой, но как только начинаю все это приводить к одной строке, VBE "жутко ругается" на скобки и синтаксис.
**************************
Простите за лишний пост, все написал.
Эта строка должна выглядеть так:
Range(Range("A5"), Range("A5").End(xlDown).Offset(0, 6)).Copy
**************************************
p.s. а мож это можно написать по другому, без .End(xlDown) ?
Re: Знатокам синтаксиса формул Excel VBA. Как написать формулу
Добавлено: 17 июн 2008, 00:43
Aent
[A5].CurrentRegion.Copy ?
Если в столбце G есть данные
Re: Знатокам синтаксиса формул Excel VBA. Как написать формулу
Добавлено: 17 июн 2008, 06:26
SAS888
Если в столбце "G" нет данных, то нет и требуемого диапазона.
Если есть, например, одно значение, то код
Код: Выделить всё
Range(Range("A5"), Range("A5").End(xlDown).Offset(0, 6)).Copy
скопирует диапазон "A5:G" & Rows.Count, т.е. до последней строки листа. Что есть не правильно, не говоря уже о том, что в столбце "G" может много раз встретиться пустая ячейка. Корректно, опять же при условии наличия хотя бы одного значения в столбце "G" (If Columns("G").Text <> ""), можно записать:
Код: Выделить всё
Range([A5], Cells(Cells(Rows.Count, "G").End(xlUp).Row, "G")).Copy
Re: Знатокам синтаксиса формул Excel VBA. Как написать формулу
Добавлено: 17 июн 2008, 09:24
VictorM
Aent, спасибо за совет, но .CurrentRegion в данном случае не идет, там вокруг этих данных полно еще всякого. Вообще стараюсь его применять очень ограниченно.
SAS888, большое спасибо, очень красиво. И работает как надо.
Только у меня вопрос возник, раньше не приходилось работать с [ ] и не могу понять синтаксис. Справка выдает "поиск не дал результатов".
Можно пару слов о применении [ ] ?
Спасибо.
Re: Знатокам синтаксиса формул Excel VBA. Как написать формулу
Добавлено: 17 июн 2008, 10:26
SAS888
[A5] - это то же, что Range("A5"). Просто сокращенная запись, которую "понимает" компилятор VBA.
Re: Знатокам синтаксиса формул Excel VBA. Как написать формулу
Добавлено: 17 июн 2008, 10:31
VictorM
SAS888, СПАСИБО!!!!
Я этого нигде не мог найти.
Re: Знатокам синтаксиса формул Excel VBA. Как написать формулу
Добавлено: 17 июн 2008, 11:15
VictorM
И вот опять вопрос по синтаксису.
Почему вот это
Код: Выделить всё
Worksheets("БТ").Range([A5], Cells(Cells(Rows.Count, "G").End(xlUp).Row, "G")).ClearContents
не работает, если лист не активен. Если сделаю вот так
Код: Выделить всё
Worksheets("БТ").Activate
Range([A5], Cells(Cells(Rows.Count, "G").End(xlUp).Row, "G")).ClearContents
все работает

но у меня таких листов 5 штук и не хочу я их активировать, только для того чтобы очистить диапазон с данными

можно их конечно сгруппировать и т.д. , но меня интересует - почему не работает первая строка?
Спасибо.
Re: Знатокам синтаксиса формул Excel VBA. Как написать формулу
Добавлено: 17 июн 2008, 11:41
SAS888
Если лист не активен, то ссылку на лист необходимо повторять при каждом обращении к ячейке. Иначе, получается, что Вы пытаетесь выделить диапазон от
до последней заполненной ячейки столбца "G" активного листа. Т.е. нужно так:
Код: Выделить всё
With Worksheets("БТ")
.Range(.Range("A5"), .Cells(.Cells(Rows.Count, "G").End(xlUp).Row, "G")).ClearContents
End With