有没有办法在不使用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
有没有办法做到这一点,还是我坚持另一个问题的解决方案?
答案 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