使用数组来存储工作簿的名称
我写了一个代码,将excel工作簿的名称存储在数组中,并将其用于for循环。
Private Sub CommandButton1_Click() Dim myArr As Variant Dim lngCounter As Long myArr = Array("Rahul", "Ameya") For lngCounter = LBound(myArr) To UBound(myArr) Set x = Workbooks.Open("C:\Users\*****\Desktop\New folder\" & myArr(lngCounter) & ".xls") Set y = Workbooks.Open("C:\Users\ND18521\Desktop\New folder\" & myArr(lngCounter) & ".xls") With x.Sheets(myArr(lngCounter)) Set aCell1 = .Range("A1:X1000").Find(What:="User", LookIn:=xlValues, LookAt:=xlWhole, _ MatchCase:=False, SearchFormat:=False) .Range(aCell1, .Cells(.Rows.Count, aCell1.Column).End(xlUp)).Offset(2, 0).Copy _ ThisWorkbook.Sheets(myArr(lngCounter)).Range("A2") End With Next lngCounter End Sub
但是,我在下面的线路上出现错误:
用x.Sheets(myArr(lngCounter))
错误:需要对象
每当你使用StackOverflow的代码时,试着理解它背后的东西。 或者至less使用与代码中相同的缩进 。 话虽如此,请尝试以下操作
- 在桌面上创build两个文件 –
Sheet1
和Sheet2
。 - 运行下面的代码。
- 试着去适应它。
码:
Option Explicit Public Sub TestMe() Dim myArr As Variant Dim myWb As Workbook Dim lngCounter As Long myArr = Array("Sheet1", "Sheet2") For lngCounter = LBound(myArr) To UBound(myArr) Set myWb = Workbooks.Open("C:\Users\" & Environ$("Username") & "\Desktop\" _ & myArr(lngCounter) & ".xlsx") With myWb.Worksheets(myArr(lngCounter)) Debug.Print .Name End With myWb.Close False Next lngCounter End Sub
试试这个x.Worksheets(myArr(lngCounter))
我看到代码的一些问题,但我主要担心的是,你正在循环一个包含文件名的数组,但同时你使用这些名称作为表名。 这真的是你想要做的吗? Rahul
的工作簿是否有工作表Rahul
和工作手册Ameya
有一张工作表Ameya
?
其他的事情要提到:
-
您从不使用您分配给
y
的工作簿 -
你不要声明variablesx和y。 始终使用
option explicit
并声明所有variables以避免难以find错误。