使用数组来存储工作簿的名称

我写了一个代码,将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使用与代码中相同的缩进 。 话虽如此,请尝试以下操作

  1. 在桌面上创build两个文件 – Sheet1Sheet2
  2. 运行下面的代码。
  3. 试着去适应它。

码:

 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错误。