在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