Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA в среде Excel / 13 сообщений из 13, страница 1 из 1
21.06.2004, 18:53
    #32570424
Beginner_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA в среде Excel
Ниже показаны попытки получить содержимое левой верхней ячейки,
Входящей в диапазон A1:A10 - НЕ ПОЛУЧАЕТСЯ,
ПОМОГИТЕ, пример взят со стр. 603 книги
“Использование microsoft Excel 97” , 1998 год выпуска


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Range("Name2").Select  ‘ имя выделенной области    "Name2" – A1: A10

Dim m_iProdaja As Integer  ‘ для отладки

 '-  m_iProdaja = CurrentRegion.TopLeftCell
 
m_iProdaja = TopLeftCell   '  ВЫВОДИТ 0,  но в ячейке имеется 11
 

 '+  но не то Worksheets("Лист1").Range("Name2").Select
 
 '- Selection.Cells.TopLeftCell
 

 '+  Range("Name2").ClearContents ' весь диаразон почищен,
 
 ' но свойство TopLeftCell отсутствует
 

m_iProdaja = TopLeftCell   '  ВЫВОДИТ 0
 
MsgBox "22.Extracted value from cell используя свойство TopLeftCell" + _
vbNewLine & m_iProdaja, vbInformation

СПАСИБО.
...
Рейтинг: 0 / 0
21.06.2004, 19:30
    #32570478
arseny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA в среде Excel
У меня в Excel 2003 тоже такого нету (TopLeftCell). Может это есть только в Office 97...
А у тебя какая версия Excel?
И не знаю, что там в книжке написали, но я пользуюсь следующим способом:

B5:B15 - диапазон
MsgBox Range("B5:B15").Range("A1") - выведет первую клетку диапазона
MsgBox Range("B5:B15").Range("A11") - выведет последнюю клетку диапазона
...
Рейтинг: 0 / 0
22.06.2004, 09:44
    #32570847
Beginner_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA в среде Excel
у меня версия

Microsoft@ Excel 97 SR-1

PS: ОПИСАННОЕ РЕШЕНИЕ В КНИГЕ ЛОГИЧНО, но НЕ РАБОТАЕТ

Спасибо.
...
Рейтинг: 0 / 0
22.06.2004, 14:33
    #32571760
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA в среде Excel
Если важен конечный результат, а не метод его достижения, вот одно из решений:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub main()
Dim wb As Workbook, r As Range
Set wb = ThisWorkbook     'Есть именованный диапазон "Отчёт"
 
Set r = wb.Names("Отчёт").RefersToRange     'позиционируем на него r
 
Debug.Print r.Cells( 1 ,  1 ).Value     'левая верхняя ячейка
 
End Sub
...
Рейтинг: 0 / 0
22.06.2004, 15:00
    #32571833
Дурак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA в среде Excel
2Processor

автор
Debug.Print r.Cells(1, 1).Value 'левая верхняя ячейка


Поясните, плиз, для тупых... Для чего это?


автор
PS: ОПИСАННОЕ РЕШЕНИЕ В КНИГЕ ЛОГИЧНО, но НЕ РАБОТАЕТ

Поменьше верьте книгам... Я в оф. издании от Майрософта ТАКОЕ видел :)...
...
Рейтинг: 0 / 0
22.06.2004, 17:19
    #32572290
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA в среде Excel
To Guest
Поясните, плиз, для тупых...

Поменьше верьте книгам... Я в оф. издании от Майрософта ТАКОЕ видел :)...

Первое со вторым не стыкуется. Ник "отметаем с негодованием".
Тогда что неясно?
...
Рейтинг: 0 / 0
22.06.2004, 18:16
    #32572499
Beginner_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA в среде Excel
Если важен конечный результат, а не метод его достижения, вот одно из решений:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub main()
Dim wb As Workbook, r As Range
Set wb = ThisWorkbook     'Есть именованный диапазон "Отчёт"
 
Set r = wb.Names("Отчёт").RefersToRange     'позиционируем на него r
 
Debug.Print r.Cells( 1 ,  1 ).Value     'левая верхняя ячейка
 
End Sub

error в строке:

Set r = wb.Names("Лист1").RefersToRange 'позиционируем на него r
...
Рейтинг: 0 / 0
22.06.2004, 18:22
    #32572512
Дурак
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA в среде Excel
2Processor

автор
Первое со вторым не стыкуется. Ник "отметаем с негодованием".
Тогда что неясно?


Опять не понял :)...
Что с чем не стыкуется?

И причем тут мой ник? "Северный бобер" - значит можно, "Лох позорный" тоже хорошо :), а Дурак - выходит плохо?

А если я себя именно таким ощущаю...?

Не буду делать пост оффтопик, но, IMHO, мой Ник - моя проблема... Не нравиться - просто не отвечайте на мои вопросы и игнорируйте, но учить жизни не нужно...

И, плиз, без обид.
...
Рейтинг: 0 / 0
22.06.2004, 19:18
    #32572616
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA в среде Excel
To Beginner_1
Обычно ошибка сопровождается текстом, поясняющим природу ошибки.
Могу предположить (но не могу проверить!), что ошибка вызвана отсутствием:
а) имени "Отчёт" в Вашей рабочей книге;
б) свойства RefersToRange в Excel97.

1. Приведенный мною пример сделан на основе книги, УЖЕ содержащей именованный диапазон: в Вашем примере это "Name2", в моём - "Отчёт".
2. Вместо CurrentRegion.TopLeftCell я использовал левую верхнюю ячейку
(.Cels(1,1)) именованного диапазона.
3. Имя именованого диапазона разрешает доступ к самому диапазону.
4. Диапазон как Range-объект возвращается свойством RefersToRange
(строка Set r = wb.Names("Отчёт").RefersToRange).
5. Обращаясь к ячейке именованного диапазона, индексы которой (1,1),
мы обращаемся к той же ячейке, что и TopLeftCell.
6. Выводя в окно отладчика значение (.Value) этой ячейки, проверяем корректность достижения поставленной цели.
...
Рейтинг: 0 / 0
23.06.2004, 11:04
    #32573209
Beginner_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA в среде Excel
БОЛЬШОЕ СПАСИБО

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
PROCESSOR_у за детальное объяснение.
Если бы TopLeftCell and BottomRightCell работали,
то, если диапазон занимает допустим  2  столбца  B1:C10,
то интуитивно  я предполагал, что

BottomRightCell 

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

Ещё раз - СПАСИБО
...
Рейтинг: 0 / 0
23.06.2004, 13:55
    #32573776
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA в среде Excel
в данном случае по Вашему алгоритму программисту
надо точно указывать номер последней ячейки C10
Но, вообще говоря, заранее неизвестно, какой диапазон попадёт на обработку.
Excel предоставляет возможность узнать адрес последней ячейки разными способами. В частности, в приведенный пример можно вставить такой оператор:
Код: plaintext
Debug.Print r.Cells(r.Rows.Count, r.Columns.Count).Value
...
Рейтинг: 0 / 0
23.06.2004, 14:01
    #32573795
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA в среде Excel
Или вот ещё один метод:
Код: plaintext
1.
Debug.Print r.SpecialCells(xlCellTypeLastCell).Value
...
Рейтинг: 0 / 0
25.06.2004, 14:17
    #32577534
bEGINNER_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA в среде Excel
Или вот ещё один метод:
Код: plaintext
Debug.Print r.SpecialCells(xlCellTypeLastCell).Value

Большое спасибо Processor_e, предпоследний пример РАБОТАЕТ ПРАВИЛЬНО,
а последний не завершается с ошибкой, но и не работает. Не надо тратить время, хорошо что хотя один из предложенных способов
решает проблему.

БОЛЬШОЕ СПАСИБО !
Владимир из Тернополя.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA в среде Excel / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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