繁体   English   中英

如何将workbook_open应用于多个工作表

[英]How to apply workbook_open to multiple sheets

我有一个excel工作簿,每天有很多用户与具有不同分辨率,屏幕缩放等的多个显示器交互。我需要所有工作表来调整我希望用户每次查看的每张工作表的范围。

以下适用于1个工作表,但如何将其应用于所有工作表(Sheet1,Sheet2等)

Private Sub Workbook_Open()
With Sheets("Sheet1")
    Columns("A:P").Select
    ActiveWindow.Zoom = True
    Range("A1").Select
End With
End Sub

您可以使用Worksheet_Activate事件,并放置如下代码

Private Sub Worksheet_Activate()
    Columns("A:P").Select
    ActiveWindow.Zoom = True
    Range("A1").Select
End Sub

在每张纸上,根据需要编辑范围。

该代码将在每次激活工作表时执行,这可能与您想要的不一样,因此您可能需要使用一些更复杂的东西并使用:

Private AlreadyRun As Boolean
Private Sub Worksheet_Activate()
    If Not AlreadyRun Then
        Columns("A:P").Select
        ActiveWindow.Zoom = True
        Range("A1").Select
        AlreadyRun = True
    End If
End Sub

这只会在第一次激活工作表时执行某些操作(因为AlreadyRun变量最初将为False,但是一旦运行一次便会更改为True),或者

Private AlreadyRun As Boolean
Private Sub Worksheet_Activate()
    Dim CurRng as Range
    Set CurRng = Selection
    Columns("A:P").Select
    ActiveWindow.Zoom = True
    CurRng.Select
    If Not AlreadyRun Then
        Range("A1").Select
        AlreadyRun = True
    End If
End Sub

它将在每次激活时调整工作表的大小,但仅在第一次时将选定的单元格移动到A1。

为避免由保存工作簿时的当前工作表导致的问题,当重新打开工作簿时未通过工作表_激活事件,您可以添加一个工作簿_Open事件,该事件显示

Private Sub Workbook_Open()
    Application.Screenupdating = False
    Dim ws As Worksheet
    Set ws = Activesheet

    'For the next two lines, just pick any two of your worksheets
    'All it is trying to do is to ensure whichever sheet was active at open
    'is deactivated before being activated again in the "ws.Activate" command
    Worksheets("Sheet1").Activate
    Worksheets("Sheet2").Activate

    ws.Activate
    Application.Screenupdating = True
End Sub

(在事件运行时禁用屏幕更新将避免用户看到工作表的任何“闪烁”。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM