如何在Excel中冻结工作表

4

我在我的Excel工作簿中遇到了一个问题。我有25个以上的工作表,我想时不时地查看第1个工作表。有没有办法冻结工作簿的前两个工作表呢?

目前,我通过按下Ctrl+Page Up按钮来导航工作表。FYI,我正在使用MS-Office 2007。


有趣,我从未想过,但似乎没有简单的方法来做到这一点。 - jedison
谢谢,Jedison。我相信没有简单的方法,但我愿意听取建议。 - Devraj
2
很抱歉,没有内置的方法。您可以使用一些VBA函数来完成,然后将它们映射到键盘快捷键上。一个函数能帮助你跳转到“冻结”工作表,另一个函数实现了一种“后退”按钮。您甚至可以将VBA编码到插件中,使其与特定工作簿分离。 - Bathsheba
有没有一个键盘快捷键,使用一行VBA代码来激活Sheet1? - iDevlop
有趣的问题,已点赞! - paul
3个回答

1
如果我理解正确:您希望用户只停留在Sheet1和2上:
在主事件中:
Private Sub Workbook_Open()
    ActiveWindow.DisplayWorkbookTabs = False
End Sub

并且在事件中:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If ActiveWindow.DisplayWorkbookTabs Then ActiveWindow.DisplayWorkbookTabs = False
    If ((Sh.Name) <> "Sheet1") And ((Sh.Name) <> "Sheet2") Then Sheets("Sheet1").Select
End Sub

当禁用选项卡时,请勿打开。如果您尝试更改代码并返回Sheet1,则会显示。
将密码添加到VBA宏中...
如果仅用于快速更改,请删除选项卡的代码...

这是不是意味着我不能去除了Sheet1和Sheet2之外的其他工作表? - Jun Yu

0

在每个工作表中

Private Sub Worksheet_Activate ( )
    Call Funciona
End Sub

在模块中

Sub Funciona()
    With ActiveSheet
        If .Index > 1 Then
            If .Previous.Name <> "Principal" Then
                Sheets("Principal").Move Before:=ActiveSheet
            End If
        End If
    End With
End Sub

0

这段代码(在ThisWorkbook模块中)将使Sheet1保持在你所在的任何工作表的左侧。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
        
    Application.EnableEvents = False
    
    If Sh.Name <> Sheet1.Name Then
        Sheet1.Move Sh
        Sh.Activate
    End If
    
    Application.EnableEvents = True
        
End Sub

按下Ctrl+PgUp键浏览一堆工作表有点奇怪,因为现在需要按两次Ctrl+PgUp才能移动一个工作表——第一次将您移到Sheet1(因为它总是在左边),第二次将您移到下一个工作表(这时Sheet1就被移到了它的左边)。

也许您可以加入一个计时器,只有在停留在一个工作表上几秒钟后才移动Sheet1。

更新 使用计时器

在标准模块中:


Public gshToMove As Object
Public gdtTimeToMove As Date

Sub MoveSheet()
    
    Application.EnableEvents = False
    
    Sheet1.Move gshToMove
    gshToMove.Activate
    
    Set gshToMove = Nothing
    gdtTimeToMove = 0
    
    Application.EnableEvents = True
    
End Sub

在 ThisWorkbook 模块中。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    
    If Sh.Name <> Sheet1.Name Then
        'if something's schedule, unschedule it
        If gdtTimeToMove <> 0 Then
            Application.OnTime gdtTimeToMove, "MoveSheet", , False
        End If
        
        'schedule the sheet move for three seconds from now
        gdtTimeToMove = Now + TimeSerial(0, 0, 3)
        Set gshToMove = Sh
        Application.OnTime gdtTimeToMove, "MoveSheet", , True
    End If
    
    Application.EnableEvents = True
    
End Sub

当代码实际运行时,您仍然会看到一些闪烁。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接