当使用多个工作表时,克里斯想知道是否有一种方法可以“锁定”所有工作表中的滚动。例如,如果他向下滚动并在Sheet1上滚动直到看到第100至140行以及G至P列,那么当他切换到Sheet2(或任何其他工作表)时,他希望在这些行和列上显示相同的行和列工作表。

完成此任务的唯一方法是使用宏。所发生的是,宏需要确定停用工作表时(在左边)可见的行和列,然后将激活的工作表(将要使用的工作表)的显示设置为相同的行和列。以下宏,添加到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_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3860)适用于Microsoft Excel 97、2000、2002和2003。