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

3

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

这可行吗?


1
我不确定我理解这个问题。您可以重新措辞并详细解释您需要什么吗? - Cody Piersall
没有办法使用选项栏下的选项来完成这个任务。也许可以使用VBA或其他自定义方式。我考虑过将监视窗口与冻结前两行相结合,但这对于审查来说真的很困难。甚至复制粘贴带有公式的图片,但仍然存在您最初提出的问题。我将在下面提出两个替代方案。 - daniellopez46
5个回答

5
Range("A1").Select

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

您可以使用分割列和行进行操作。

3
能否提供比代码块更详细的内容? - jessehouwing
不完全符合我的要求,但几乎达到了,谢谢。 - user206168
作为参考,将 .SplitRow = 0 设置为意味着不会冻结任何行,同样地,将 .SplitColumn = 0 设置为意味着不会冻结任何列。 - Marcucciboy2

4

无论在任何选项卡下都不能完成此操作。

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


2

请在单元格Z3上点击窗口菜单中的冻结窗格

在VBA中,尝试以下操作:

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

嗨,谢谢,但我已经会那个了,不过我的目标还是要冻结在Z之前的所有列和行,所以我想要冻结“A1:Y12”。 - user206168

1
在旧版本的Excel中,这是可能的。您可以选择任何单元格,转到窗口选项卡并冻结窗格。左侧和上方该单元格的所有内容都将被冻结。但是,微软似乎决定在每个新版本的Office中删除更多的功能。每个版本都有更少我们熟知和喜爱的旧功能。很快,您可能会使用Works或Open Office。我希望我能切换到Word Perfect,但太多公司正在使用MS Office。

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

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