Задание Range в стиле R1C1

Программирование на Visual Basic for Applications
den380
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 16
Зарегистрирован: 30.08.2006 (Ср) 11:03
Откуда: Kiev.UA

Задание Range в стиле R1C1

Сообщение den380 » 30.08.2006 (Ср) 11:35

Доброго времени суток!

есть задача выбирать (select) Range ячеек (cells) если задана начальная ячейка (верхняя левая) и его (Rendge-а) размерность - i колонок, j рядов. С рядами вопросов нет, там цифры, а вот с колонками...
Писать огромный case - не хочется, да и не красиво.
Может кто поделится опытом?
Спасибо.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 30.08.2006 (Ср) 11:36

Range(Cells(y,x),Cells(y+j,x+i))
Быть... или не быть. Вот. В чём вопрос?

den380
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 16
Зарегистрирован: 30.08.2006 (Ср) 11:03
Откуда: Kiev.UA

Сообщение den380 » 30.08.2006 (Ср) 13:41

uhm писал(а):Range(Cells(y,x),Cells(y+j,x+i))

x - буква?

$€rg
Обычный пользователь
Обычный пользователь
 
Сообщения: 99
Зарегистрирован: 11.01.2006 (Ср) 10:15
Откуда: Санкт-Петербург

Сообщение $€rg » 30.08.2006 (Ср) 14:09

цифра, и в справке по вба много интересного
процесс печатания программного кода укрепляет моральные устои С. Каммингс VBA4Dummies
:study:

den380
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 16
Зарегистрирован: 30.08.2006 (Ср) 11:03
Откуда: Kiev.UA

Сообщение den380 » 30.08.2006 (Ср) 14:16

2 $€rg
вот спасибо, за тыкание носом, но тока не за этим я на форум пришел... :(

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 30.08.2006 (Ср) 14:23

Я бы тоже тебя туда же ткнул, если честно - в справке написано и что такое Range, и что такое Cells. У тебя как задана "начальная ячейка (верхняя левая)"?
Быть... или не быть. Вот. В чём вопрос?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.08.2006 (Ср) 14:31

den380 писал(а):вот спасибо, за тыкание носом, но тока не за этим я на форум пришел... :(

А за чем?
Lasciate ogni speranza, voi ch'entrate.

den380
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 16
Зарегистрирован: 30.08.2006 (Ср) 11:03
Откуда: Kiev.UA

Сообщение den380 » 30.08.2006 (Ср) 14:34

uhm писал(а):У тебя как задана "начальная ячейка (верхняя левая)"?

В формате A1 - т. е. "B6"

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 30.08.2006 (Ср) 14:56

Тогда можно так:

Range("B6",Range("B6").Offset(j-1,i-1))
Быть... или не быть. Вот. В чём вопрос?

den380
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 16
Зарегистрирован: 30.08.2006 (Ср) 11:03
Откуда: Kiev.UA

Сообщение den380 » 30.08.2006 (Ср) 15:28

вы уж простите меня, хелпы не читающего, но такая вот строчечка работать напрочь отказывается.
Код: Выделить всё
For Each c In Worksheets("table").Range(Cells(1, 3), Cells(1, 16)) '("c1:p1")

может кто подскажет где собака порылась?

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 30.08.2006 (Ср) 15:31

uhm писал(а):Тогда можно так:

Range("B6",Range("B6").Offset(j-1,i-1))


Думаю, что все несколько проще:

[B6].Resize(i, j)


например:
Код: Выделить всё
Sub test()
    Dim rng As Range, i As Long, j As Long
    i = 100: j = 25
    Set rng = [B6].Resize(i, j)
End Sub
Привет,
KL

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 30.08.2006 (Ср) 15:33

У меня эта строчечка напрочь работает.
Быть... или не быть. Вот. В чём вопрос?

den380
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 16
Зарегистрирован: 30.08.2006 (Ср) 11:03
Откуда: Kiev.UA

Сообщение den380 » 30.08.2006 (Ср) 15:36

uhm писал(а):У меня эта строчечка напрочь работает.

У мя office 2003 Pro Eng, а у тя?

den380
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 16
Зарегистрирован: 30.08.2006 (Ср) 11:03
Откуда: Kiev.UA

Сообщение den380 » 30.08.2006 (Ср) 15:44

попробовал даже вот так
Код: Выделить всё
Dim rng As Range
Set rng = Worksheets("table").Range(Cells(1, 3), Cells(1, 16))
For Each c In rng 'Worksheets("table").Range(Cells(1, 3), Cells(1, 16)) '("c1:p1")

толку - ноль. При запуске ругается на "Worksheets("table").Range(Cells(1, 3), Cells(1, 16))" - "runtime error 1004"

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 30.08.2006 (Ср) 15:46

den380 писал(а):...такая вот строчечка работать напрочь отказывается.
Код: Выделить всё
For Each c In Worksheets("table").Range(Cells(1, 3), Cells(1, 16)) '("c1:p1")


Дело скорее всего в том, что на момент запуска кода Worksheets("table") и ActiveSheet или Me это не одно и тоже. Попробуй так:

Код: Выделить всё
Sub test()
    Dim rng As Range, c As Range
    With Worksheets("table")
        Set rng = .Range(.Cells(1, 3), .Cells(1, 16))
    End With
    For Each c In rng
        '...
    Next c
End Sub


Суть в том, чтобы все используемые ранги [.Range(...), .Cells(1,3), .Cells(1,16)] находились на одном листе.
Привет,
KL

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 30.08.2006 (Ср) 15:53

Весь код покажи? В этих трех строчках ошибки нет.

UPD: А, видимо, действительно дело в этом - у тебя явно прописано, на каком листе находится Range, но не прописано, на каком листе находятся Cells, поэтому если активный лист не совпадает с листом table, происходит ошибка.
Быть... или не быть. Вот. В чём вопрос?

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 30.08.2006 (Ср) 15:56

uhm писал(а):Весь код покажи? В этих трех строчках ошибки нет.


В этих трех строчках ошибка есть - см. мой пост выше :wink:
Привет,
KL

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 30.08.2006 (Ср) 15:57

Да-да, признаю :)
Быть... или не быть. Вот. В чём вопрос?

den380
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 16
Зарегистрирован: 30.08.2006 (Ср) 11:03
Откуда: Kiev.UA

Сообщение den380 » 30.08.2006 (Ср) 16:03

lapink2000 писал(а):
uhm писал(а):Весь код покажи? В этих трех строчках ошибки нет.


В этих трех строчках ошибка есть - см. мой пост выше :wink:

З А Р А Б О Т А Л О ! ! !
спасибо всем.
Вот окончательная версия.
Код: Выделить всё
Sub NakladnaGeneration()

Dim rng As Range
With Worksheets("table")
    Set rng = .Range(.Cells(1, 3), .Cells(1, 16))
End With
For Each c In rng
    If Not IsEmpty(c.Value) Then
    ......
    End If
Next c

End Sub



PS 2moders
тему можно закрывать с пометкой solution


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42

    TopList