Метод Show объекта Range, использующийся в VBA Excel для прокрутки первой ячейки заданного диапазона в область видимого экрана. Синтаксис, примеры.
Метод Show объекта Range предназначен для прокручивания активного рабочего листа до перемещения первой ячейки заданного диапазона, находящейся вне видимого экрана, в область видимого экрана.
Если заданная ячейка (первая ячейка заданного диапазона) уже находится в пределах видимого экрана, прокрутка не произойдет.
Синтаксис метода Range.Show
Expression – выражение (переменная), представляющее объект Range.
На сайте разработчика сказано, что диапазон должен состоять из одной ячейки на активном листе. Тесты показывают, что можно указать диапазон из более, чем одной ячейки, и, в этом случае, по центу экрана будет размещена первая ячейка заданного диапазона.
Примеры
Пример 1
Отображение первой ячейки диапазона по центру экрана:
Sub Primer1() With Range(Cells(50, 50), Cells(60, 55)) .Interior.Color = vbGreen .Show End With End Sub |
Результат выполнения кода:
Пример 2
Отображение центральной ячейки диапазона по центру экрана после вычисления ее координат:
Sub Primer2() Dim r As Long, c As Long With Range(Cells(50, 50), Cells(60, 55)) .Interior.Color = vbGreen r = (.Cells(1).Row + .Cells(.Cells.Count).Row) 2 c = (.Cells(1).Column + .Cells(.Cells.Count).Column) 2 End With Cells(r, c).Show End Sub |
Если вы запускали код первого примера, попробуйте запустить код второго примера, не прокручивая перед этим рабочий лист. Вы убедитесь, что положение зеленого диапазона на видимом экране не изменится.
После этого вручную прокрутите рабочий лист так, чтобы зеленый диапазон скрылся из вида (должна быть скрыта ячейка Cells(r, c)
). Причем прокрутку сделайте как по строкам, так и по столбцам. После запуска кода из второго примера зеленый диапазон займет центральное положение на видимом экране:
Если скрыть зеленый диапазон прокруткой листа только по строкам или только по столбцам, положение непрокрученных столбцов (или строк) останется на экране прежним. Чтобы увидеть это наглядно, запустите код первого примера, прокрутите рабочий лист вручную только по строкам и запустите код второго примера. Затем повторите тест с прокруткой рабочего листа только по столбцам.
Группа: Пользователи Ранг: Прохожий Сообщений: 7
Замечаний: |
Доброго времени суток!
Созданный мною макрос обрабатывает длинный список, около 1500 строк, и меняет значение одной из ячеек в соответствии с заданными условиями. При этом ячейка выделяется — становится активной. Всё чудесно работает. Не смог решить на вид простую задачу: автоматический скролинг на активную ячейку (строку). Практически, мне надо методами vba, выполнить команду сочетания клавиш EXCEL: («Ctrl+Back Space»).
Причём команда
ActiveCell.Activate
вовсе не перемещает экран на активную ячейку.
Адрес ячейки у меня определяется примерно так: Cells(491, СтолбецNum).
Подскажите варианты решения этой задачи. Заранее благодарен!
0 / 0 / 0 Регистрация: 27.04.2009 Сообщений: 265 |
|
1 |
|
Выведение активной ячейки на экран20.06.2011, 12:22. Показов 7094. Ответов 5
На листе 30 000 строк. Путем Cells(i,3).Select нужная ячейка выделяется, но не факт,что она появится на видимом экране. То есть, выделенная ячейка остается вне зоны видимости, вверху или внизу экрана. Причем происходит это через раз. Иногда выскакивает на видимую часть экрана, иногда нет.
0 |
Терминатор |
|
20.06.2011, 13:35 |
2 |
Здравствуй Штурман, давненько не слышал тебя. |
0 / 0 / 0 Регистрация: 27.04.2009 Сообщений: 265 |
|
20.06.2011, 13:37 [ТС] |
3 |
Логично. Счас попробую. Благодарю.
0 |
Gleb1 1 / 1 / 0 Регистрация: 19.05.2011 Сообщений: 80 |
||||
20.06.2011, 14:52 |
4 |
|||
Можно сделать принудительное появление ячейки на экране:
0 |
Сумрак |
|
21.06.2011, 18:23 |
5 |
Activate хватит |
Штурмaн 0 / 0 / 0 Регистрация: 27.04.2009 Сообщений: 265 |
||||
05.07.2011, 17:48 [ТС] |
6 |
|||
Прошу прощения за долгое молчание,замотался. Все же пришлось воспользоватся советом Gleb1 .
все стало работать прекрасно. Всем спасибо.
0 |
VovaK | Дата: Четверг, 03.11.2011, 23:19 | Сообщение № 1 | |||||||||||||
|
Иногда вам просто нужно, чтобы активная ячейка отображалась в верхнем левом углу экрана Excel, как показано ниже. В общем, вы можете перетащить полосу прокрутки вниз вручную, чтобы завершить эту работу, но здесь я представляю код VBA для быстрой прокрутки активной ячейки в левый верхний угол экрана Excel.
Отображение активной ячейки в верхнем левом углу с кодом VBA
Отображение активной ячейки в верхнем левом углу с кодом VBA
Чтобы использовать код VBA для отображения активной ячейки в верхнем левом углу экрана, вы можете сделать следующее:
1. Щелкните ячейку, которую нужно отобразить в левом верхнем углу, и нажмите Alt + F11 ключи для включения Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модули, скопируйте и вставьте приведенный ниже код в пустой скрипт.
VBA: прокрутить активную ячейку в верхний левый угол
Sub TopLeft()
Application.Goto ActiveCell, Scroll:=True
End Sub
3. Press F5 key to run the code, then the active cell has been gone to top left of screen.
The Best Office Productivity Tools
Kutools for Excel Solves Most of Your Problems, and Increases Your Productivity by 80%
- Reuse: Quickly insert complex formulas, charts and anything that you have used before; Encrypt Cells with password; Create Mailing List and send emails…
- Super Formula Bar (easily edit multiple lines of text and formula); Reading Layout (easily read and edit large numbers of cells); Paste to Filtered Range…
- Merge Cells/Rows/Columns without losing Data; Split Cells Content; Combine Duplicate Rows/Columns… Prevent Duplicate Cells; Compare Ranges…
- Select Duplicate or Unique Rows; Select Blank Rows (all cells are empty); Super Find and Fuzzy Find in Many Workbooks; Random Select…
- Exact Copy Multiple Cells without changing formula reference; Auto Create References to Multiple Sheets; Insert Bullets, Check Boxes and more…
- Extract Text, Add Text, Remove by Position, Remove Space; Create and Print Paging Subtotals; Convert Between Cells Content and Comments…
- Super Filter (save and apply filter schemes to other sheets); Advanced Sort by month/week/day, frequency and more; Special Filter by bold, italic…
- Combine Workbooks and WorkSheets; Merge Tables based on key columns; Split Data into Multiple Sheets; Batch Convert xls, xlsx and PDF…
- More than 300 powerful features. Supports Office / Excel 2007-2021 and 365. Supports all languages. Easy deploying in your enterprise or organization. Full features 30-day free trial. 60-day money back guarantee.
Read More… Free Download… Purchase…
Office Tab Brings Tabbed interface to Office, and Make Your Work Much Easier
- Enable tabbed editing and reading in Word, Excel, PowerPoint, Publisher, Access, Visio and Project.
- Open and create multiple documents in new tabs of the same window, rather than in new windows.
- Increases your productivity by 50%, and reduces hundreds of mouse clicks for you every day!
Read More… Free Download… Purchase…
Comments (2)
No ratings yet. Be the first to rate!
При выделении ячейки у меня показывается Msgbox с вопросом передавать содержимое ячейки на другой лист или нет. |
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Это через API надо привязывать к координатам ячейки. В свое время ZVI выкладывал подобный пример для календаря. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
слэн Пользователь Сообщений: 5192 |
если с формой(не с msgbox), то можно и без api |
ZVI Пользователь Сообщений: 4328 |
{quote}{login=The_Prist}{date=09.09.2009 11:55}{thema=}{post}Это через API надо привязывать к координатам ячейки. В свое время ZVI выкладывал подобный пример для календаря.{/post}{/quote} http://www.planetaexcel.ru/forum.php?thread_id=9898 Прилагаю пример, который там приводился, с календарём по двойному клику на ячейках с датами с привязкой формы к координатам ячейки, |
ZVI Пользователь Сообщений: 4328 |
К предыдущему сообщению — см. приложение |
{quote}{login=слэн}{date=09.09.2009 01:00}{thema=}{post}если с формой(не с msgbox), то можно и без api{/post}{/quote} |
|
слэн Пользователь Сообщений: 5192 |
для формы существует специальный объект, куда может вовращаться управление при наступлении определенных событий. форму вы можете конструировать гораздо гибче.. единственное — ее координаты отсчитываются относительно родительского окна(т.е application), а аналогичные свойства ячеек — относительно клиентского(т.е с учетом показываемых менюшек и т.п) |
ZVI Пользователь Сообщений: 4328 |
{quote}{login=слэн}{date=09.09.2009 03:16}{thema=}{post}для формы существует специальный объект, куда может вовращаться управление при наступлении определенных событий. форму вы можете конструировать гораздо гибче.. единственное — ее координаты отсчитываются относительно родительского окна(т.е application), а аналогичные свойства ячеек — относительно клиентского(т.е с учетом показываемых менюшек и т.п){/post}{/quote} А вот с API все сработает нормально. Кстати в приложенном примере с API также учтено, чтобы форма не убегала за края экрана. |
Всё!!! |
|
nerv Пользователь Сообщений: 3071 |
{quote}{login=ZVI}{date=09.09.2009 02:09}{thema=}{post}К предыдущему сообщению — см. приложение{/post}{/quote}К сожалению, при объединенных ячейках «халтурит», т.е. позиционирует форму там, где непосредственно происходил клик. |
VovaK Пользователь Сообщений: 1716 |
|
nerv Пользователь Сообщений: 3071 |
Ух ты! Спасибо, Владимир, сходим : ) |
ZVI Пользователь Сообщений: 4328 |
{quote}{login=nerv}{date=30.10.2011 02:24}{thema=Re: }{post}К сожалению, при объединенных ячейках «халтурит», т.е. позиционирует форму там, где непосредственно происходил клик.{/post}{/quote} Но код позиционирования формы, действительно можно и нужно улучшить, чтобы использовать с любыми другими формами, в том числе и на объединенных ячейках. Приложил обновленную версию с измененным алгоритмом позиционирования. Изменен (упрощен) код вызова формы в модуле ЭтаКнига. Код и свойства формы также изменены. |
ZVI Пользователь Сообщений: 4328 |
Чтобы полностью вывести не спозиционированое начальное положение формы за видимые пределы, для поного исключения мигания при активации, в коде формы в процедуре UserForm_Initialize лучше |
nerv Пользователь Сообщений: 3071 |
>Александр, только не говорите, что Вам нужна дата в объединенных ячейках То, чего мне «удалось» добиться без API (см. файл) http://www.excelworld.ru/forum/3-949-1 Уж не знаю, на сколько это хорошо или плохо, но тем не менее) p.s.: воспользовался Вашим файлом, предварительно удалив все Ваши опознавательные знаки, дабы не подумали, что это Вы так коряво состряпали : ) |
VovaK Пользователь Сообщений: 1716 |
Саша, просьба — уберите календарь с формы. Я покажу как это выглядит на 2007… |
VovaK Пользователь Сообщений: 1716 |
Замечания по позицированию в 2007: 1. Не учел выключение заголовков |
nerv Пользователь Сообщений: 3071 |
VovaK, спасибо, что помогаете! >1. Не учел выключение заголовков >2. В Win 7 нужно удалять ширину бордюров (границы формы наезжают на ячейку) — без WinAPI никак BoardWidth = (GetSystemMetrics(5&) + GetSystemMetrics(45&) + GetSystemMetrics(7&)) / 1.333 >3.Ленту и строку формул «видит» только при Zoom 100%, при другом Zoom сильно смещает. >Не учел полноэкранный режим >6. И последнее, при позицировании на границе экрана форма «ныряет» за границы видимого — это не есть хорошо, нужно позицировать по правой (или по верхней) границе ячейки… |
VovaK Пользователь Сообщений: 1716 |
Заголовки строк и таблиц, там где наименование строк и столбцов — их можно выключить. |
ZVI Пользователь Сообщений: 4328 |
Александр, спасибо Вам, что подняли тему 04.11.2011 09:32, обратив внимание на проблемы в моем коде при наличии объединенных ячеек. Другими словами, какие и чьи проблемы-то теперь пытаемся решить? Если речь о варианте без API, то это вроде был предмет обсуждения Вами в другой теме. В ней я не участвовал по 2-м причинам: Простые решения мне нравятся, особенно если они, как Вы выразились, «не халтурят». Ваш вариант (post_274918.xls) хорош и очевидно сгодится для многих случаев, но пока сильно шалит при закреплении окна. Также немного «гуляет» по вертикали при масштабировании или изменении высоты ячейки форма, на объединенных ячейках форма не у нижнего края, с большими номерами строк «гуляет» по горизонтали, не учитывает отключения заголовков строк и таблиц, форма может выйти и за пределы видимости. Впрочем, походить по хоженным чужими ногами граблям я тоже люблю — хорошо обучает и незабываемо |
nerv Пользователь Сообщений: 3071 |
VovaK, благодарю, теперь буду знать : ) ZVI, >2. Если очевидна хоть одна техническая проблема, которая без API неустранима, то он станет вариантом с API, тогда чем не устраивает предложенный? В свою очередь, хочу еще раз напомнить название темы: >Ваш вариант (post_274918.xls) хорош и очевидно сгодится для многих случаев, но пока сильно шалит при закреплении окна. |
VovaK Пользователь Сообщений: 1716 |
Саша, кроме закрепления областей есть еще одна засада — разбиение окна (Вкладка «Вид» команда — Разделить) |
nerv Пользователь Сообщений: 3071 |
Спасибо, Владимир, знаю) И здесь тоже отмечал, кода скрины выкладывал. |
nerv Пользователь Сообщений: 3071 |
|
nerv Пользователь Сообщений: 3071 |
Все пытаюсь добиться позиционирования формы относительно активной ячейки, в связи с чем хотел задать ряд вопрос: 1. Как определить позицию курсора клавиатуры (каретки)? Написано, что «копирует позицию знака вставки в клиентских координатах. Позиция знака вставки всегда дается в клиентских координатах окна, в котором она находится». Эт, конечно, все замечательно, но куда плясать дальше?) 2. На клавиатуре есть чудесные клавиши: Меню/Shift+F10. Если их нажать в экселе, то всплывающее меню будет автоматически размещено по отношению к активной ячейке. Можно ли этим как-нибудь воспользоваться? Отследить, какие ф-ции API вызываются и как оно работает? : ) |
nerv Пользователь Сообщений: 3071 |
НУ НАКАНЕЦ-ТА БЛИН!))) Для начала хотел бы поблагодарить Владимира (ZVI) за его замечательный пример с позиционированием, из которого я очень много подчерпнул) И уж коли я о Вас заговорил, если не ошибаюсь у Вас там в первой строке (и еще чуть ниже) опечатка: LongPtr (Win64). Хотя вряд ли, но тем не менее : ) Итак, позиционирование формы относительно активной ячейки. API Win32. В данном файла форма вызывается по ср-вом горячих клавиш — Ctrl+Enter. p.s.: в 2007 и выше не тестировал. В Windows Vista и Windows Seven тоже. Если кому не лень,сделайте скриншот посмотреть, как она себя ведет. с уважением, nerv : ) |
ZVI Пользователь Сообщений: 4328 |
{quote}{login=nerv}{date=25.11.2011 08:08}{thema=Позиционирование формы относительно ячейки. Версия 1.0}{post}…если не ошибаюсь у Вас там в первой строке (и еще чуть ниже) опечатка: LongPtr (Win64). Хотя вряд ли, но тем не менее : ){/post}{/quote} |
sva Пользователь Сообщений: 1027 |
В Win 7 и Excel 2007 нормально позиционируется. |
Если часть ячейки находится в видимой части экрана, а часть — нет, по Ctrl+Enter ничего не происходит. |
|
ZVI Пользователь Сообщений: 4328 |
#30 25.11.2011 20:50:11 {quote}{login=nerv}{date=25.11.2011 08:08}{thema=Позиционирование формы относительно ячейки. Версия 1.0}{post}НУ НАКАНЕЦ-ТА БЛИН!)))В данном файла форма вызывается по ср-вом горячих клавиш — Ctrl+Enter.{/post}{/quote} |