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

时间:2016-03-15 17:24:55

标签: excel vba excel-vba

我正在尝试从以下

简化此功能
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中的引号,当我运行它时会抛出一些模糊的错误

3 个答案:

答案 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 = FalseActiveWindow.FreezePanes = False之间添加行ActiveWindow.FreezePanes = True,因为如果FreezePanesSplit之后完成,那么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

这仅适用于在滚动数据时可见的冻结标题