通过vba冻结行,而不激活单个工作表

时间:2017-10-02 08:22:07

标签: excel vba excel-vba

有没有办法在不使用select的情况下冻结任意数量工作表的前x行,或者激活每张工作表?

This answer建议使用

With ActiveWindow
    If .FreezePanes Then .FreezePanes = False
    .SplitColumn = 0
    .SplitRow = 1
    .FreezePanes = True
End With

,录制宏建议使用Rows("4:4").Select: ActiveWindow.FreezePanes = True,但我更喜欢一种不依赖于激活工作簿中每张工作表的解决方案。

即。

之类的东西
Sub FreezeTopXPanes(x As Long)
  Dim ws As Worksheet

  For Each ws in ThisWorkbook.Worksheets
    ' Freeze top x rows
  Next ws
End Sub

有没有办法做到这一点,还是我坚持另一个问题的解决方案?

1 个答案:

答案 0 :(得分:0)

这就是问题所在。正如@Patrick提到的那样,这是不可能的,因为冻结窗格方法仅适用于activewindow。查看更多详情here.

我认为最好的方法是对所有工作表或某个工作表使用单独的程序:

Sub Freeze_wsh() 
Dim Ws As Worksheet
Application.ScreenUpdating = False
For Each Ws In Application.ActiveWorkbook.Worksheets
    Ws.Activate
    With Application.ActiveWindow
        .FreezePanes = True
        .ScrollRow = 1 
        .ScrollColumn = 1 
    End With
Next
Application.ScreenUpdating = True
End Sub 

或者您可以添加变量以引用某个工作表

Sub Freeze_wsh(x as Integer) 
Dim Ws As Worksheet
Application.ScreenUpdating = False
set Ws = ActiveWorkbook.Worksheets(x)
    Ws.Activate
    With Application.ActiveWindow
        .FreezePanes = True
        .ScrollRow = 1 
        .ScrollColumn = 1 
    End With
Next
Application.ScreenUpdating = True
End Sub