VBA如何将整数传递到范围值

VBA如何将整数传递到范围值,vba,excel,Vba,Excel,我试图从以下几点来简化这个函数 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 sprea

我试图从以下几点来简化这个函数

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
我似乎无法删除
范围中的引号,当我运行它时会抛出一些模糊的错误,我喜欢一直使用
单元格()
,因为它更明确(对我来说)

sheetAct.Range(“sheetRow:sheetRow”)。选择

或者,只需使用
sheetAct.Range(sheetRow&“:”&sheetRow)。选择


但是为什么要使用
。选择
?你可以选择最佳实践。(当然,如果你用它来再次检查你是否有正确的范围,那没关系。当你处理数据时,你要小心)。

我发现这种方法非常有效

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
端接头


这仅用于冻结标题,在滚动数据时可见作为快速解决方案,我建议如下:

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
-状态。在这种情况下,
ActiveWindow.FreezePanes=True
将忽略所选范围,并将其冻结在
Split
所在的位置


我还建议使用
sheetAct.Rows(sheetRow+1)
,因为窗格将冻结在
sheetRow
上。但这只是为了更好的逻辑
->
如果有
3
将冻结3行,而不是2行。

“sheetRow:sheetRow”
应该是
sheetRow&“:”&sheetRow”
可能是
sheetAct.Cells(sheetRow,1).EntireRow.选择
。另外-
sheetRow作为整数
-整数将在第28000行或其他行后出错…使用
sheetRow作为长
谢谢,我确信我会犯更多新手错误…VBA新手。单元格给出了一个不合格的引用错误sheetAct.Range(.Cells(sheetRow,1),.Cells(sheetRow,1)).EntireRow。Select@RickFlyFish-如何将
sheetAct
发送到sub?我假设它是
工作表
。还要注意
。范围
不是以
sheetAct开头。
使用
,只需将
用作“占位符”。
Public Sub freezeRow(sheetAct As Worksheet, sheetRow As String)
  Application.Goto sheetAct.Rows(sheetRow)
  ActiveWindow.FreezePanes = False
  ActiveWindow.FreezePanes = True
End Sub