如何在excel中冻结多行和多列?

时间:2013-04-30 14:15:46

标签: excel excel-vba excel-2007 excel-2010 vba

我希望冻结范围S1:Y17,隐藏列A:R,然后从Z列开始我只想冻结前2行。

这可能吗?

5 个答案:

答案 0 :(得分:4)

使用任何色带下的任何选项都无法实现此目的。

或者,您可以将冻结点设置为Z18,特别是因为列A:R被隐藏或使用视图>新窗口然后排列全部。

答案 1 :(得分:4)

Range("A1").Select

With ActiveWindow
    .SplitColumn = 1
    .SplitRow = 1
    .FreezePanes = True
End With

您可以使用拆分列和行。

答案 2 :(得分:1)

确保只选择一个单元格Z3,然后在“窗口”菜单上单击冻结窗格

在VBA中,试试这个:

Range("Z3").select
ActiveWindow.FreezePanes = True

答案 3 :(得分:1)

在旧版本的excel中可以实现这一点。您可以选择任何单元格,转到Windows选项卡和冻结窗格。该单元格左侧和上方的所有内容都被冻结。但微软似乎决定在每个新版本的Office中删除更多功能。每个人都知道和喜爱的旧功能较少。很快,你不妨使用Works或Open Office。我希望我可以切换到Word Perfect,但有太多公司正在使用MS Office。

答案 4 :(得分:0)

我知道这个问题很旧,但是我经常访问它,以至于我想添加@ daniellopez46的答案的VBA版本。该代码将:

  1. 创建电子表格的第二个窗口
  2. 垂直(并排)平铺窗口
  3. 在一个窗口中显示从列S开始的范围
  4. 在第二个窗口中向前滚动到列Z
  5. 冻结第二个窗口的前2行

完成电子表格的工作并关闭其中一个窗口后,您可能不想保留所做的格式设置,因此我添加了一个ResetWindow宏。

Sub MacroA()

    Dim window1 As Window
    Set window1 = ActiveWindow

    ResetWindowA

    Dim window2 As Window
    Set window2 = window1.NewWindow

    Windows.Arrange xlArrangeStyleVertical

    With window2
        'jumps to column S
        .ScrollRow = 1
        .ScrollColumn = 19
    End With

    With window1
        'jumps to column Z
        .ScrollRow = 1
        .ScrollColumn = 26

        'freezes the first two rows
        .SplitRow = 2
        .SplitColumn = 0
        .FreezePanes = True
    End With

End Sub

Sub ResetWindowA()

    With ActiveWindow
        'reset previous freeze, if any
        .FreezePanes = False
        .SplitRow = 0
        .SplitColumn = 0
    End With

End Sub

如果您希望代码隐藏不使用的范围,而不是简单地滚动到您要使用的范围,那么我也制作了下一个代码段,以隐藏您正在使用的范围以外的所有范围。

当您同时使用两个窗口并要关闭并保存文档时,它也有自己的ResetWindow

Sub MacroB()

    Dim window1 As Window
    Set window1 = ActiveWindow

    ResetWindowB

    Dim window2 As Window
    Set window2 = window1.NewWindow

    Windows.Arrange xlArrangeStyleVertical

    With window2
        .ScrollRow = 1
        .ScrollColumn = 1

        'Hide all but S1:Y17
        Columns("A:R").EntireColumn.Hidden = True
        Columns("Z:XFD").EntireColumn.Hidden = True
        Rows(18 & ":" & Rows.Count).EntireRow.Hidden = True
    End With

    With window1
        .ScrollRow = 1
        .ScrollColumn = 1

        'Hide all columns before Z
        Columns("A:Y").EntireColumn.Hidden = True

        'freezes the first two rows
        .SplitRow = 2
        .SplitColumn = 0
        .FreezePanes = True
    End With

End Sub

Sub ResetWindowB()

    'unhide rows
    If Columns("XFD").EntireColumn.Hidden = True Then
        Columns("A:R").EntireColumn.Hidden = False
        Columns("Z:XFD").EntireColumn.Hidden = False
        Rows(18 & ":" & Rows.Count).EntireRow.Hidden = False
    Else
        Columns("A:Y").EntireColumn.Hidden = False
    End If

    With ActiveWindow
        'reset previous freeze, if any
        .FreezePanes = False
        .SplitRow = 0
        .SplitColumn = 0

        .ScrollRow = 1
        .ScrollColumn = 1
    End With

End Sub