在VBA中导入图纸时出错

我试图写一个VBAmacros从另一个工作簿导入工作表。 在“复制”行上出现“下标超出范围”错误。 该文件打开正确,但我不知道之后出了什么问题。

Private Sub CommandButton1_Click() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim lastdate As String, filename As String lastdate = Format(sheet_1.Range("D11") - 7, "ddmmyy") filename = "C:\Dir\file " & lastdate & ".xlsm" Workbooks.Open (filename) Workbooks(filename).Worksheets(2).Copy after:=ThisWorkbook.Worksheets(1) Workbooks(filename).Close Application.ScreenUpdating = True Application.DisplayAlerts = False End Sub 

编辑:错误更改为“下标超出范围”,代码更改,以便索引引用的工作表。

代码v2:

 Private Sub CommandButton1_Click() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim lastdate As String, filename As String lastdate = Format(sheet1.Range("D11") - 7, "ddmmyy") filename = "C:\Dir\file " & lastdate & ".xlsm" Dim wbk As Workbook wbk = Workbooks.Open(filename) wbk.Worksheets(2).Copy after:=ThisWorkbook.Worksheets(1) wbk.Close End Sub 

你得到的下标超出范围错误,因为你没有工作簿的Name权。 这个Name与完整的path(这是你所假设的)是不一样的。 这和文件名是一样的。

这将工作:

 Workbooks.Open "C:\Dir\file1234.xlsm" Workbooks("file1234.xlsm").Sheets(1).Range("a1").Value = "yay" 

而这不会:

 Workbooks.Open "C:\Dir\file1234.xlsm" Workbooks("C:\Dir\file1234.xlsm").Sheets(1).Range("a1").Value = "yay" 

但是引用工作簿的更好的方法是像这样设置一个明确的引用:

 Dim wbk As Workbook Set wbk = Workbooks.Open(filename) wbk.Worksheets(2).Copy after:=ThisWorkbook.Worksheets(1) 

wbk你现在可以处理你想要的工作簿了; 你不必猜测它的名字或任何东西。

引用对象variables时,关键字“Set”是必需的:

 Private Sub CommandButton1_Click() Application.ScreenUpdating = False 'Application.DisplayAlerts = False '<<this does not look like it is required - when is an alert displayed in the method? Dim lastdate As String, filename As String lastdate = Format(sheet1.Range("D11") - 7, "ddmmyy") filename = "C:\Dir\file " & lastdate & ".xlsm" Dim wbk As Workbook Set wbk = Workbooks.Open(filename) '<<Set is required wbk.Worksheets(2).Copy after:=ThisWorkbook.Worksheets(1) wbk.Close End Sub