我想在.xlsx
文件中获取A和B列的数据,并将其粘贴到Workbook
和BS
中的有效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)
答案 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