2013-02-09 33 views
1

我试过这段代码,似乎它不工作。谁能告诉我为什么?Excel VB循环文件夹并运行宏

Sub ProcessFiles() 
    Dim Filename, Pathname As String 
    Dim wb As Workbook 

    Pathname = ActiveWorkbook.Path & "C:\Macro\" 
    Filename = Dir(Pathname & "*.xls") 
    Do While Filename <> "" 
     Set wb = Workbooks.Open(Pathname & Filename) 
     DoWork wb 
     wb.Close SaveChanges:=True 
     Filename = Dir() 
    Loop 
End Sub 

Sub DoWork(wb As Workbook) 
    With wb 
     Range("A1").Select 
     ActiveCell.FormulaR1C1 = "Name" 
     Range("B1").Select 
     ActiveCell.FormulaR1C1 = "Anil" 
     Range("A2").Select 
    End With 
End Sub 
+0

[在多个excel文件上运行相同的excel宏](http:// stackoverflow。com/questions/14766238/run-same-excel-macro-on-multiple-excel-files) – brettdj 2013-02-09 05:34:55

+0

答案已经在这个问题的原始文章中给出。 – peterm 2013-02-09 05:55:21

回答

2

我发现了两个值得关注的方面。首先,

路径名= ActiveWorkbook.Path & “C:\宏\”

这将返回类似“C:\用户\ [用户名] \ [FILELOCATION] C:\宏\ “(这是我的输出C:\用户\开发\ DesktopC:\宏\”)

一个简单的方法来检查,这是放置

MSGBOX路径名

路径名= ActiveWorkbook.Path & “C:\宏\”

路径名= ActiveWorkbook.Path & “C:\宏\”

MsgBox路径名

并运行代码。这将向您显示主要问题的路径名。如果您打算打开/修改Excel文件在同一目录ActiveWorkbook,这将很好地工作

路径名= ActiveWorkbook.Path &“\”

(除去MSGBOX路径名,当你完成)

关注的第二个方面是Do While Loop。如果文件名不等于“”,您现在将它设置为只执行循环。但是,当你进入循环时,你可以用Filename = Dir()将Filename设置为“”。如果您不打算遍历文件夹,则可以使用单个IF语句。如果您计划遍历文件夹,请继续执行Do While语句,但最终需要修改Filename = Dir()。

希望有所帮助。

1

这可能是您的问题:

Pathname = ActiveWorkbook.Path & "C:\Macro\"

ActiveWorkbook.Path已经返回C:\YourPathToWorkbook所以你Pathname大概是这样的:

C:\yourpathtoworkbookC:\Macro\

你应该通过代码F8步骤和悬停当它们以黄色突出显示时,在变量上方。

+1

+1有助于提醒您使用调试器。你可以“悬停”,或者(我的首选),你可以添加变量和表达式到监视窗口 - 这样你就可以看到多个变量如何变化而没有悬停(另外,悬停并不总是让你想要的东西)。您也可以使用Debug.print(您的表达式)并查看“立即”窗口(您可以在“查看”菜单下找到该窗口)。 – Floris 2013-02-09 15:22:08

+0

@弗洛里斯完全同意调试方面。我本人更喜欢当地人的窗口,但我注意到,除非你快速地获得答案,否则真的很难,所以为了简洁起见,我将这些细节留给了 – 2013-02-09 23:57:51