Excel VBA运行时错误91,将macros复制到新的工作簿时

下面的代码是造成一个

运行时错误“91”:对象variables或块variables未设置

此代码在我创build它的Excel工作簿中正常工作,但是当我将其复制并粘贴到另一个Excel工作簿时,出现错误。

错误在线

LastRow = Cells.Find(What:="*", _ 

有人知道为什么吗?

我已经尝试在声明后将该variables设置为一个值,但是这并没有解决。

  Sub mileStoneDatePivot() Dim r As Long, pasteRowIndex As Long, v() As Long, i As Long Dim LastRow As Long Dim lCol As Long 'Insert a New Blank Worksheet On Error Resume Next Application.DisplayAlerts = False Worksheets("PivotTable").Delete Sheets.Add Before:=ActiveSheet ActiveSheet.Name = "DataSheet" Application.DisplayAlerts = True 'Switch off error masking On Error GoTo 0 'This sheet is where data should originate Sheets("DCC_AGGREGATOR_FLATFILE").Rows("1").Copy Sheets("DataSheet").Range("A1") LastRow = Cells.Find(What:="*", _ After:=Range("A1"), _ LookAt:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row 

Find无法find您所请求的时候返回Nothing
当你要求它在一张空白纸上find* (任何东西)时,它什么也不会返回 – 它找不到任何东西。
当你要求它返回没有的行号时,它会给出你所得到的错误信息。

为了避免这个错误,将Find的结果传递给范围variables:

 Dim rLastRow as Range Set rLastRow = Cells.Find(What:="*", _ After:=Range("A1"), _ LookAt:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False) 

在获取行号之前,您可以检查范围是否为空:

 If Not rLastRow Is Nothing Then LastRow = rLastRow.Row End If 

我build议看看其中一个post,find最后一个单元格,并把所有的东西都拉出来,以一个单独的function。
https://stackoverflow.com/search?q=find+last+cell+vba

编辑:另外,你的Find只是看activesheet。
LastRow = Thisworkbook.Worksheets("Datasheet").Cells.Find....将始终在工作簿中查看数据表中的代码。