При использовании нескольких листов Крис задается вопросом, есть ли способ «заблокировать» прокрутку всех листов. Например, если он прокручивает лист 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.