如何在一个工作簿中使用macros来读取和分析多个Excel中的数据 – Excel VBA

我看了一堆文章,试图找出这一点,但似乎没有任何工作。 我已经在Excel工作簿中构build了一个macros来练习收集数据并制作我想要的表格,现在我想将其应用于其他许多工作簿中的其他文件夹,而不是用于练习的原始文件夹。 我把它放在同一个地方,但写了我认为会应用到其他位置的线条。 奇怪的是,我所拥有的代码将对新文件进行更改,但是所有更改都是通过读取我一直在练习的工作簿中的数据。 例如,它会将图纸添加到新文件中,但它会使用相同的信息填充每个工作簿,而不是正在更改的书中的信息。

这是我有什么:

Sub LoopFiles() Dim MyFileName, FilenameNew, MyPath As String Dim MyBook As Workbook MyPath = "C:\ExcelT2\" MyFileName = Dir(MyPath & "*.csv") Do Until MyFileName = "" Set wb1 = Workbooks.Open(MyPath & MyFileName) Set MyBook = ActiveWorkbook ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count) ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count) ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count) With wb1 wb1.Worksheets(1).Select . . . 

在此之后,它只是逐行读取第一张纸上的数据,但不是从打开的工作簿的第一张纸上读取数据。 我不知道是怎么回事 以下是我读取数据的一个示例行:

 ra1 = Cells(i, 7) . . . Worksheets("Sheet2").Cells(prevval, 3) = ra1 

这将从错误的工作簿中提取数据,但将其放在新打开的工作簿中的右侧工作表中。 请帮忙!

***更新

这一行现在给我一个应用程序或对象定义的错误。

 ElseIf wb1.Worksheets(1).Cells(i, 3) <> wb1.Worksheets(1).Cells((i - 1), 3) Then 

请参阅我所做的更改。 这些更改是为了显式限定您正在使用的所有对象。 否则,VBA读取将以不同方向抛出代码的行的方式(如引用意外的工作簿或工作表)的方式存在默认行为。

 Do Until MyFileName = "" Set wb1 = Workbooks.Open(MyPath & MyFileName) 'Set MyBook = ActiveWorkbook --> wb1 is already set to newly opened file With wb1 '--> work directly with wb1 .Sheets.Add After:= .Worksheets(.Worksheets.Count) '--> add the "." in front of object to qualify it to parent (wb1 in this case) '..... ra1 = .Workhseets(1).Cells(i,7) .Worksheets(2).Cells(prevval, 3) = ra1 '.... End With