powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA в среде Excel
13 сообщений из 13, страница 1 из 1
VBA в среде Excel
    #32570424
Beginner_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ниже показаны попытки получить содержимое левой верхней ячейки,
Входящей в диапазон 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
VBA в среде Excel
    #32570478
arseny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в Excel 2003 тоже такого нету (TopLeftCell). Может это есть только в Office 97...
А у тебя какая версия Excel?
И не знаю, что там в книжке написали, но я пользуюсь следующим способом:

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

Microsoft@ Excel 97 SR-1

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

Спасибо.
...
Рейтинг: 0 / 0
VBA в среде Excel
    #32571760
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если важен конечный результат, а не метод его достижения, вот одно из решений:
Код: 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
VBA в среде Excel
    #32571833
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Processor

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


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


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

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

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

Первое со вторым не стыкуется. Ник "отметаем с негодованием".
Тогда что неясно?
...
Рейтинг: 0 / 0
VBA в среде Excel
    #32572499
Beginner_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если важен конечный результат, а не метод его достижения, вот одно из решений:
Код: 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
VBA в среде Excel
    #32572512
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Processor

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


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

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

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

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

И, плиз, без обид.
...
Рейтинг: 0 / 0
VBA в среде Excel
    #32572616
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
VBA в среде Excel
    #32573209
Beginner_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БОЛЬШОЕ СПАСИБО

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

BottomRightCell 

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

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

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

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


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