用于复制/粘贴的for循环中的VBA错误下标超出范围

时间:2017-12-06 16:44:59

标签: excel vba excel-vba for-loop runtime-error

我一直收到for循环的错误消息。它应该做的是将变量与给定工作表的每一行的第一列进行比较,如果匹配则复制它,然后将其粘贴到不同工作簿中的工作表但由于某种原因我不断得到“运行时错误'9':下标超出范围“对于引用新工作簿/工作表的行。

到目前为止我的for循环:

For i = 1 To Sheets(1).UsedRange.Rows.Count

    If Sheets(1).Cells(i, 1).Value Like dateRange & "*" Then
       Sheets(1).Rows(i).Copy
       Workbooks(destinationWorkbook).Worksheets("Sheet2").Rows(i).Paste 'Debug shows the error is here
    End If

Next i

在前面的代码中,我将变量定义为:

destinationWorkbook = "C:\Users\lbran\Desktop\Book1.xlsm"

我也尝试过使用Workbooks(destinationWorkbook).Worksheets(“Sheet2”)。Cells(i,1).Paste

我对VBA很新,所以我不确定我是否正确引用了对工作表的粘贴,但我知道它确实存在于工作簿中的新空白页

1 个答案:

答案 0 :(得分:1)

一旦你打开了一个工作簿,它的名字就是它保存的文件名,而不是路径。所以你会这样做

  Workbooks.open(destinationWorkbook) 

但是请将其称为

  Workbooks("Book1.xlsm")

但是我想知道你是否想要复制到不在硬盘上的新工作簿?在这种情况下,你会写

     Workbooks.add
     WorkBooks("book1")

没有文件扩展名,因为您尚未保存它。 您可以使用对象变量

来避免所有这些问题
 Dim wb as workbook
Set wb = workbooks.open(destinationworkbook)
or
Set wb = workbooks.add

然后只是wb来引用工作簿