通过vba冻结行,不需要激活单个表单

有什么办法可以冻结任意数量的工作表的顶部x行而不使用select或者激活每个表单?

这个答案build议使用

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

,并logging一个macrosbuild议使用Rows("4:4").Select: ActiveWindow.FreezePanes = True ,但我更喜欢一个解决scheme,不依赖于激活工作簿中的每个工作表。

也就是说

 Sub FreezeTopXPanes(x As Long) Dim ws As Worksheet For Each ws in ThisWorkbook.Worksheets ' Freeze top x rows Next ws End Sub 

有没有办法做到这一点,或者我坚持在另一个问题的解决scheme?

这是问题。 正如@Patrick所提到的,这是相当不可能的,因为冻结窗格方法只适用于activewindow。 在这里看到更多细节。

我认为最好的办法是使用单独的程序,对于所有的工作表或者某个特定的工作表:

 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 

或者你可以添加一个variables来引用某个表单

 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