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

如何在一个工作簿中使用宏读取和分析多个工作簿中的数据-Excel VBA,vba,excel,Vba,Excel,我看了一大堆文章试图弄明白这一点,但似乎没有任何效果。我在Excel工作簿中构建了一个宏来练习收集数据和制作所需的表格,现在我想将它应用到其他文件夹中的许多其他工作簿,而不是我用于练习的原始工作簿。我把它放在同一个地方,但写下了我认为可以应用到其他地方的行。奇怪的是,我的代码将对新文件进行更改,但所有更改都是从我练习的工作簿中读取的数据。例如,它会将工作表添加到新文件中,但会用相同的信息填充每个工作簿,而不是使用正在更改的书本中的信息 以下是我所拥有的: Sub LoopFiles() Dim

我看了一大堆文章试图弄明白这一点,但似乎没有任何效果。我在Excel工作簿中构建了一个宏来练习收集数据和制作所需的表格,现在我想将它应用到其他文件夹中的许多其他工作簿,而不是我用于练习的原始工作簿。我把它放在同一个地方,但写下了我认为可以应用到其他地方的行。奇怪的是,我的代码将对新文件进行更改,但所有更改都是从我练习的工作簿中读取的数据。例如,它会将工作表添加到新文件中,但会用相同的信息填充每个工作簿,而不是使用正在更改的书本中的信息

以下是我所拥有的:

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
ElseIf wb1.工作表(1).单元格(i,3)wb1.工作表(1).单元格((i-1),3)然后

请参见下面我所做的更改。进行这些更改是为了明确限定正在使用的所有对象。否则,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

尝试通过包含工作簿对象来限定此
After:=Worksheets(Worksheets.Count)
。类似于:
After:=wb1.Worksheets(Worksheets.Count)
,并尝试不使用
ActiveWorkbook
,因为它可能产生不可预知的结果。使用您创建的对象,例如:
使用wb1.Sheets(“Sheet1”)
ra1=.Cells(i,7)
结束,而
以wb1.Sheets(“Sheet2”)
.Cells(prevval,3)=ra1
结束,出于某种原因,现在我得到了错误1004(应用程序定义或对象定义的错误)在我比较两个单元格的行上。添加了对带有问题行的op的编辑。如果您的原始问题已回答,并且您有一个新问题,请创建一个新问题并将其标记为已回答。如果您的原始问题未回答,请告诉我(我们)问到的原始问题中有什么不起作用。我就是这么做的。您的修复没有修复问题,而是使我的代码停止运行。无论这是一个新问题还是同一个问题,我都不确定,但无论如何,我添加了原始问题的更新以澄清正在发生的事情。我仍然认为这与规范有关如果你不知道更改的位置,但更新行是它不喜欢的。@Rosie-Fair point。在查看你编辑的问题时,行本身看起来很好。但是,从它在代码中的工作方式来看,很难说清楚,因为你只显示了不完全一致的片段。如果你发布了更完整的代码块,则可能会出现错误让我们更清楚一些。我想我发现了我的问题,那是一个小的不相关的打字错误。你的回答帮助它走上了正确的轨道,我遵循了你所说的,我认为它是有效的。谢谢!