我正在尝试从以下
简化此功能Public Sub freezeRow(sheetAct, sheetType As String, sheetRow As Integer)
sheetAct.Activate 'Activate sheet
ActiveWindow.FreezePanes = False 'Unfreeze all rows
Select Case sheetType
Case "Sum"
'Freeze the Summary spread sheet after row 9
sheetAct.Range("10:10").Select
Case "Data"
'Freeze the Summary spread sheet after row 2
sheetAct.Range("3:3").Select
End Select
ActiveWindow.FreezePanes = True 'Freeze selected rows
End Sub
类似
Public Sub freezeRow(sheetAct, sheetType As String, sheetRow As Integer)
sheetAct.Activate 'Activate sheet
ActiveWindow.FreezePanes = False 'Unfreeze all rows
sheetAct.Range("sheetRow:sheetRow").Select
ActiveWindow.FreezePanes = True 'Freeze selected rows
End Sub
我似乎无法删除range
中的引号,当我运行它时会抛出一些模糊的错误
答案 0 :(得分:1)
我喜欢一直使用Cells()
,因为它更明确(对我而言)
sheetAct.Range("sheetRow:sheetRow").Select
与
With sheetAct
.Range(.Cells(sheetRow,1),.Cells(sheetrow,1)).EntireRow.Select
End with
或者,只需使用sheetAct.Range(sheetRow & ":" & sheetRow).Select
但为什么要使用.Select
?你可以work around using .Select
这是最佳做法。 (当然,如果您正在使用它来仔细检查您是否拥有合适的范围,那么这很好。当您处理要小心的数据时。)
答案 1 :(得分:1)
作为一种快速解决方案,我建议这样的事情:
Public Sub freezeRow(sheetAct As Worksheet, sheetRow As String)
Application.Goto sheetAct.Rows(sheetRow)
ActiveWindow.FreezePanes = False
ActiveWindow.FreezePanes = True
End Sub
您可以在ActiveWindow.Split = False
和ActiveWindow.FreezePanes = False
之间添加行ActiveWindow.FreezePanes = True
,因为如果FreezePanes
在Split
之后完成,那么ActiveWindow.FreezePanes = False
将窗口更改回Split
- 状态,就像之前一样。在这种情况下,ActiveWindow.FreezePanes = True
将忽略所选范围,并在Split
所在的位置冻结它。
另外,我建议使用sheetAct.Rows(sheetRow + 1)
因为窗格会冻结sheetRow
。但这仅仅是为了更好的逻辑->
,3
会冻结3行而不是2。
答案 2 :(得分:0)
我发现这种方法效果很好
Public Sub freezeRow(sheetAct, sheetRow As String)
Dim rangeVal As String
rangeVal = sheetRow & ":" & sheetRow
sheetAct.Activate 'Activate sheet
ActiveWindow.FreezePanes = False 'Unfreeze all rows
sheetAct.Range(rangeVal).Select 'Select appropriate row
ActiveWindow.FreezePanes = True 'Freeze selected rows
End Sub
这仅适用于在滚动数据时可见的冻结标题