2017-07-28 265 views
0

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

以下是我有:

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 
+0

尝试此资格后':=工作表(Worksheets.Count )'通过包含一个工作簿对象,例如:'After:= wb1.Worksheets(Worksheets.Count)'并且尽量不使用'ActiveWorkbook',因为它可能会产生不可预知的结果。 – braX

+0

使用您创建的对象:'With wb1.Sheets(“Sheet1”)''ra1 = .Cells(i,7)''End With''和'With wb1.Sheets(“Sheet2”)''.Cells(prevval,3)= ra1' 'End With' –

回答

1

看到的变化下面我做了。这些更改是为了明确限定您正在使用的所有对象。否则,有在路上的默认行为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 
+0

出于某种原因,现在我在比较两个单元格的行上得到错误1004(应用程序定义的或对象定义的错误)。在问题行中添加了一个编辑操作。 – Rosie

+0

如果您的原始问题得到解答并且您有新问题,请创建一个新问题并将其标记为已回答。如果你的原件没有得到回答,请告诉我(我们)什么不符合要求的原始问题。 –

+0

这就是我所做的。您的修复无法解决问题,而是让我的代码停止运行。无论这是一个新问题还是同一个问题,我都不确定,但无论我是否在原始问题中添加了更新以澄清正在发生的事情。我仍然认为它与指定更改的位置有关,但更新行是它不喜欢的。 – Rosie

相关问题