我正在重新编写旧工作表中的代码以更新它并使其更有效。
我有一个格式化数据表的子程序,但我收到一个错误,我不知道为什么我会得到一个。我的VBA有点生疏,但以下代码应该正常工作
Sub FormatPnLDataTable(tableRange As Range)
Dim tempRange As Range, ws As Worksheet
Dim lStartRow As Long, lEndRow As Long, lLastCol As Long
Set ws = Sheets("PandLDataTable")
Application.CutCopyMode = False
lStartRow = tableRange.Row
lEndRow = lStartRow + tableRange.Rows.Count
lLastCol = tableRange.Columns.Count
'format the whole table with border
With tableRange
'format borders
'code removed for brevity
End With
'set range for the top row of table
Set tempRange = ws.Range(Cells(lStartRow, 1), Cells(lStartRow, lLastCol))
代码在这一行犯了错误
Set tempRange = ws.Range(Cells(lStartRow, 1), Cells(lStartRow, lLastCol))
但工作表(ws)有效,变量都有正确的值 对于此特定实例,lStartRow为1,lEndRow为15,lLastCol为35
答案 0 :(得分:3)
Set tempRange = ws.Range(Cells(lStartRow, 1), Cells(lStartRow, lLastCol))
虽然您已使用ws
来限定Range
来电,但 会自动应用于Cells
来电 - 这些模块默认情况下会引用ActiveSheet。
这将更加强大:
Set tempRange = ws.Range(ws.Cells(lStartRow, 1), ws.Cells(lStartRow, lLastCol))
另请参阅:What is the default scope of worksheets and cells and range?