Vba 面向对象错误--引用其他工作表?
我使用VBA循环浏览参考号ROID列表,并从单独的页面返回正确的全名ROIDA。全名所在页面的参考号在D列,全名在A列Vba 面向对象错误--引用其他工作表?,vba,excel,Vba,Excel,我使用VBA循环浏览参考号ROID列表,并从单独的页面返回正确的全名ROIDA。全名所在页面的参考号在D列,全名在A列 Sub Main() 'Set variable types Dim WorksheetA As Excel.Worksheet Dim WorksheetB As Excel.Worksheet Dim ROID As Range, ROIDA As Range Set WorksheetA = ActiveWorkbook.Sheets("
Sub Main()
'Set variable types
Dim WorksheetA As Excel.Worksheet
Dim WorksheetB As Excel.Worksheet
Dim ROID As Range, ROIDA As Range
Set WorksheetA = ActiveWorkbook.Sheets("WorksheetA")
Set WorksheetB = ActiveWorkbook.Sheets("Approval Flows")
'Replacing ROID #s with full Name
'Define range of active requesting offices
Set ROID = WorksheetA.Range(Range("A7"), Range("A7").End(xlDown))
'Define range of attention lines and associated ROIDs
Set ROIDA = WorksheetB.Range(Range("D7"), Range("D7").End(xlDown))
'Loop through ROIDs and replace with ATTN line
For Each ID In ROID
Set Match = ROIDA.Find(ID)
If Not Match Is Nothing Then
ID = Match.Offset(0, -3)
End If
Next ID
End Sub
当我尝试运行脚本时,我从以下行收到一个面向对象的错误:
Set ROIDA = WorksheetB.Range(Range("D7"), Range("D7").End(xlDown))
这是因为我在处理多张工作表吗?我正在努力不使用激活或选择功能 是,如果在运行宏时A/B未激活。您需要使用图纸完全限定所有范围。如果在A7之后你什么都没有,最好是走到最后,向上爬,而不是向下爬
With WorksheetA
Set ROID = .Range(.Range("A7"), .Range("A7").End(xlDown))
'Or Set ROID = .Range(.Range("A7"), .Range("A" & Rows.count).End(xlup))
End With
'Define range of attention lines and associated ROIDs
With WorksheetB
Set ROIDA = .Range(.Range("D7"), .Range("D7").End(xlDown))
End With
您确定错误不是对象必需的吗?您似乎使用了许多未声明的变量。确保在模块顶部指定Option Explicit,并声明所有变量。然后确认通话范围。非限定范围调用隐式引用活动工作表,这绝对不是您在这里要做的。如果您想运行该代码,您将看到许多结果。@Mat'sMug-这相当漂亮。@SJR谢谢!我尽量不向Rubberduck发送太多垃圾邮件,但它似乎与SO=@Mat'sMug上的几乎所有其他VBA问题都相关-很好,也许SO应该将所有问题重定向到那里。