VBA如何将整数传递给范围值
我试图从以下简化这个function
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
的引号,当我运行它抛出一些模糊的错误
我喜欢使用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? 您可以解决使用 。select最佳实践。 (当然,如果你使用它来仔细检查你是否有正确的范围,那就没问题了,这是你处理数据时要小心的地方)。
作为一个快速解决scheme,我build议这样的事情:
Public Sub freezeRow(sheetAct As Worksheet, sheetRow As String) Application.Goto sheetAct.Rows(sheetRow) ActiveWindow.FreezePanes = False ActiveWindow.FreezePanes = True End Sub
你可以在ActiveWindow.FreezePanes = False
和ActiveWindow.FreezePanes = True
之间添加一行ActiveWindow.Split = False
,因为如果FreezePanes
是在一个Split
之后完成的,那么ActiveWindow.FreezePanes = False
会将窗口改回到Split
state像以前一样。 在这种情况下, ActiveWindow.FreezePanes = True
将忽略选定的范围,并冻结它在Split
点位于。
另外我build议使用sheetAct.Rows(sheetRow + 1)
因为窗格将被冻结在sheetRow
。 但是,这只是一个更好的逻辑->
有3
将冻结3行,而不是2。
我发现这个方法是完美的
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
结束小组
在滚动浏览数据时,只能看到冻结的标题