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 = FalseActiveWindow.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 

结束小组

在滚动浏览数据时,只能看到冻结的标题