Просмотр одинаковых ячеек на разных листах (Microsoft Excel)
При использовании нескольких листов Крис задается вопросом, есть ли способ «заблокировать» прокрутку всех листов. Например, если он прокручивает лист 1 вниз и поперек, пока не появятся строки с 100 по 140 и столбцы с G по P, то, когда он переключается на лист 2 (или любой другой лист), он хотел бы, чтобы на них отображались те же строки и столбцы. рабочие листы.
Единственный способ выполнить эту задачу — использовать макросы. Что должно произойти, так это то, что макрос должен определить, какие строки и столбцы видны, когда лист деактивирован (оставлен), а затем установить отображение активированного листа (того, который вы собираетесь использовать) для тех же строк и столбцов. Следующие макросы, добавленные в модуль ThisWorkbook, выполняют именно эту задачу.
Dim grngSelection As Range Dim gintScrollColumn As Integer Dim glngScrollRow As Long Private Sub Workbook_SheetActivate(ByVal Sh As Object) If TypeName(ActiveSheet) = "Worksheet" Then On Error Resume Next With ActiveWindow Sh.Range(grngSelection.Address).Select .ScrollColumn = gintScrollColumn .ScrollRow = glngScrollRow End With End If End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Dim oSheet As Object If TypeName(Sh) = "Worksheet" Then Set oSheet = ActiveSheet Application.EnableEvents = False Sh.Activate With ActiveWindow gintScrollColumn = .ScrollColumn glngScrollRow = .ScrollRow Set grngSelection = .RangeSelection End With oSheet.Activate Application.EnableEvents = True End If End Sub
Обратите внимание на использование переменных вне обработчиков событий. Эти переменные используются для передачи значений столбца, строки и выбранной области из обработчика SheetDeactivate в обработчик SheetActivate.
Конечно, вам может не понадобиться автоматическое решение. Вместо этого вы можете захотеть, чтобы пользователь предпринял определенный шаг, чтобы определить, синхронизируются ли листы. Это можно сделать, добавив следующий макрос в обычный модуль в вашей книге:
Global WindowScrollRow Global WindowScrollCol Global WindowSyncOn As Boolean Public Sub WindowLock() If Not WindowSyncOn Then WindowScrollRow = ActiveWindow.VisibleRange.Row WindowScrollCol = ActiveWindow.VisibleRange.Column Application.StatusBar = "WindowSync: ON" Else Application.StatusBar = "" End If WindowSyncOn = Not WindowSyncOn End Sub
Все, что делает этот макрос, — это проверяет состояние глобальной переменной WindowSyncOn. Если значение равно False, то текущие настройки для верхней видимой строки и самого левого видимого столбца сохраняются в глобальных переменных. Затем установка этих переменных используется следующим обработчиком событий, добавленным в модуль ThisWorkbook:
Private Sub Workbook_SheetActivate(ByVal Sh As Object) If WindowSyncOn Then If Not ActiveWindow Is Nothing Then ActiveWindow.ScrollRow = WindowScrollRow ActiveWindow.ScrollColumn = WindowScrollCol End If End If End Sub
Макрос просто проверяет настройку переменной WindowSyncOn, и если она имеет значение True (она была установлена), то макрос устанавливает, какая строка и столбец находятся вверху и слева от активного окна.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (3860) применим к Microsoft Excel 97, 2000, 2002 и 2003.