通过vba冻结行,而不激活单个图纸
有没有办法在不使用通过vba冻结行,而不激活单个图纸,vba,excel,Vba,Excel,有没有办法在不使用选择或激活每张工作表的情况下冻结任意数量工作表的前x行 建议使用 With ActiveWindow If .FreezePanes Then .FreezePanes = False .SplitColumn = 0 .SplitRow = 1 .FreezePanes = True End With ,录制宏建议使用行(“4:4”)。Select:ActiveWindow.FreezePanes=True,但我更喜欢不依赖于激活工作簿中的每
选择
或激活每张工作表的情况下冻结任意数量工作表的前x行
建议使用
With ActiveWindow
If .FreezePanes Then .FreezePanes = False
.SplitColumn = 0
.SplitRow = 1
.FreezePanes = True
End With
,录制宏建议使用行(“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
有什么方法可以做到这一点,或者我被另一个问题的解决方案所困扰吗?这就是问题所在。正如@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
或者,您可以添加一个用于引用特定图纸的变量
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
这就是问题所在。正如@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
或者,您可以添加一个用于引用特定图纸的变量
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
我认为不激活不同的表单是不可能的。文档说明,
冻结窗格
需要一个窗口
对象,而不是工作表
。另外,FreezePanes
使用ActiveCell
的位置来确定要冻结多少行和列。我可能应该引用更多的链接答案,并再次检查是否链接到了正确的答案,因为该答案至少包含一个不使用ActiveCell/select的方法。我已经更新了这个问题以包含相关信息,但是正如您所看到的,这个解决方案也依赖于使用activewindow@PatrickHonorezI认为不激活各种表单是不可能的。文档说明,冻结窗格
需要一个窗口
对象,而不是工作表
。另外,FreezePanes
使用ActiveCell
的位置来确定要冻结多少行和列。我可能应该引用更多的链接答案,并再次检查是否链接到了正确的答案,因为该答案至少包含一个不使用ActiveCell/select的方法。我已经更新了这个问题以包含相关信息,但是正如您所看到的,这个解决方案也依赖于使用activewindow@帕特里克霍诺雷斯