在不同的工作表上查看相同的单元格(Microsoft Excel)
当使用多个工作表时,克里斯想知道是否有一种方法可以“锁定”所有工作表中的滚动。例如,如果他向下滚动并在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。