运行时错误1004 - 对象'_Global'的方法'范围'失败

时间:2015-01-21 14:47:47

标签: excel vba excel-vba

我想在.xlsx文件中获取A和B列的数据,并将其粘贴到WorkbookBS中的有效BT中}列,从第6行开始。

这是我在宏的其他部分使用的代码:

Workbooks.Open ThisWorkbook.Path & "\..\macro\options.xlsx"

Workbooks("options.xlsx").Activate
Set c = .Find("licensePlate", LookIn:=xlValues)
Range(c.Offset(1, 0), Range(c.Address).End(xlDown)).Copy
ThisWorkbook.Activate
Sheets("example").Activate
Range("BS6").PasteSpecial Paste:=xlPasteValues

Workbooks("options.xlsx").Activate
Set c = .Find("description", LookIn:=xlValues)
Range(c.Offset(1, 0), Range(c.Address).End(xlDown)).Copy
ThisWorkbook.Activate
Sheets("example").Activate
Range("BT6").PasteSpecial Paste:=xlPasteValues

Workbooks("options.xlsx").Close

ThisWorkbook.Activate

除了这部分代码之外,它适用于所有宏内容。它在第5行失败,即:

(Range(c.Offset(1, 0), Range(c.Address).End(xlDown)).Copy)

1 个答案:

答案 0 :(得分:1)

.Find似乎没有引用范围,因为您没有使用With Range。因此,c设置为Nothing,当您尝试Offset Nothing Range时,您将收到错误。

您需要使用

之类的错误检查
If c is Nothing Then
    Msgbox "licensePlate Not Found"
Else
    'Run Code
End If

如果您想搜索整张表,可以使用以下内容:

Set c = Workbooks("options.xlsx").Sheets("name of sheet").Cells.Find("licensePlate", LookIn:=xlValues)
If c is Nothing Then
    Msgbox "licensePlate Not Found"
Else
    'Run Code
End If

此外,我强烈建议您避免使用Activate。相反,您应该always define the object that you are using a method on

编辑:您没有为Range定义工作表:

这样的事情应该有效:

Dim ws1 as Worksheet, Dim c As Range
Set ws1 = Workbooks("options.xlsx").Sheets("name of sheet")
Set c = ws1.Cells.Find("licensePlate", LookIn:=xlValues)
If c is Nothing Then
    Msgbox "licensePlate Not Found"
Else
    ws1.Range(c.Offset(1, 0), c.End(xlDown)).Copy
    ThisWorkbook.Sheets("example").Range("BS6").PasteSpecial Paste:=xlPasteValues
End If