如何在Excel中冻结工作表

时间:2014-04-29 12:47:28

标签: excel ms-office

我在Excel工作簿中遇到问题。我的工作簿中有25多张      我想不时地看一下sheet1。是他们可以先冻结的任何方式      两张我的工作簿?

目前我按ctrl + page up按钮浏览工作表。 仅供参考我正在使用MS-Office 2007

3 个答案:

答案 0 :(得分: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

打开时禁用Tabs。如果人们显示您是否尝试将代码更改返回到Sheet1 VBA宏的广告密码...
如果仅用于快速更改,请删除标签代码...

答案 1 :(得分: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 + PgUps来移动一张工作表 - 一个移动到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

当代码实际运行时,你仍会得到一点闪光。

答案 2 :(得分: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