Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 面向对象错误--引用其他工作表?_Vba_Excel - Fatal编程技术网

Vba 面向对象错误--引用其他工作表?

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("

我使用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("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应该将所有问题重定向到那里。