我一直收到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很新,所以我不确定我是否正确引用了对工作表的粘贴,但我知道它确实存在于工作簿中的新空白页
答案 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来引用工作簿