Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过vba冻结行,而不激活单个图纸_Vba_Excel - Fatal编程技术网

通过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@帕特里克霍诺雷斯