Плавающая информация в замороженной строке (Microsoft Excel)
У Bev есть рабочий лист с двумя закрепленными строками заголовков и закрепленным столбцом. Затем она может прокручивать страницу, еженедельно добавляя данные. Имена и промежуточные итоги фиксируются слева, а даты недели — вверху. Помимо всего этого, в первой замороженной строке у Бев есть красивый причудливый заголовок, описывающий книгу. Она ищет способ, чтобы ее заголовок (тот, что в первой строке) «плавал», чтобы при прокрутке страницы заголовок не исчезал с края видимого рабочего листа.
Самый простой способ сделать это — убедиться, что заголовок находится в ячейке A1.
Поскольку у вас заморожены один столбец и две строки, при прокрутке вправо ячейка A1, содержащая заголовок, всегда будет видна на экране. (Это работает удовлетворительно только в том случае, если весь заголовок помещается в ячейку A1, без «перетекания» в ячейку B1 или за ее пределы.)
Если вы хотите что-то более необычное в своем заголовке, вам нужно немного поработать с текстовыми полями и макросами. Если вы поместите заголовок в текстовое поле, расположенное в первой строке, вы можете использовать некоторые макросы, чтобы убедиться, что текстовое поле всегда находится по центру экрана в этой строке.
Предположим, для этого примера, что текстовое поле, содержащее заголовок, называется «TitleTextBox». Когда вы прокручиваете лист влево и вправо, макрос может автоматически проверять, чтобы левый край текстового поля всегда был равен левому краю видимой области экрана. Следующий код необходимо добавить в код рабочего листа для рабочего листа, содержащего текстовое поле:
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Me.Shapes("TitleTextBox").Left = ActiveWindow.VisibleRange.Left End Sub
Этот макрос, поскольку он является частью кода рабочего листа, будет запускаться каждый раз при изменении выделения на листе. Таким образом, когда вы используете клавиши со стрелками для перемещения влево или вправо, используете клавиши табуляции или выбираете ячейку с помощью мыши, макрос будет запускаться и следить за тем, чтобы левые края текстового поля и видимой области всегда совпадали.
Когда этот макрос не сработает, это когда вы прокручиваете влево и вправо с помощью горизонтальной полосы прокрутки в нижней части экрана. Нет никакого «события прокрутки», которое запускалось бы автоматически при использовании полос прокрутки. Пока не будет сделан выбор где-нибудь в пределах нового видимого диапазона, тем самым вызвав событие SelectionChange, расположение текстового поля не будет перемещено.
Единственный способ обойти это ограничение — использовать возможности таймера Visual Basic для периодического обновления текстового поля. Следующий код делает это каждую секунду, но при желании вы можете настроить его, чтобы он запускался реже.
Этот код добавляется в обычный модуль VBA:
Sub UpdateTB() If ActiveSheet.Name = "Sheet1" Then ActiveSheet.Shapes("TitleTextBox").Left = _ ActiveWindow.VisibleRange.Left End If Application.OnTime Now + TimeSerial(0, 0, 1), "UpdateTB" End Sub
И это добавляется к объекту книги, чтобы запустить таймер при первом открытии книги:
Private Sub Workbook_Open() UpdateTB End Sub
Если вы используете подход на основе таймера для позиционирования текстового поля, вам не нужно будет использовать то, которое привязано к событию SelectionChange. Версия с таймером просто корректирует заголовок после каждого интервала.
У любого метода, основанного на макросах, есть дополнительный «недостаток», помимо любой медлительности, вносимой запущенным кодом: каждый раз, когда код запускается, он очищает «стек отмены». Это означает, что вы не сможете «отменить» изменения, внесенные в книгу, при необходимости.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (10260) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:
link: / excel-Floating_Information_in_a_Frozen_Row [Плавающая информация в замороженной строке]
.