Excel VBA循环文件夹并运行宏

时间:2013-02-09 02:15:50

标签: excel vba

我尝试了这段代码,似乎无法正常工作。谁能告诉我为什么?

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

2 个答案:

答案 0 :(得分:2)

我发现了两个值得关注的领域。首先,

Pathname = ActiveWorkbook.Path&amp; “C:\宏\”

这将返回类似于“C:\ Users \ [USER NAME] \ [FILELOCATION] C:\ Macro \”的内容(这是我的输出C:\ Users \ Developer \ DesktopC:\ Macro \“)

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

MsgBox路径名

之后

Pathname = ActiveWorkbook.Path&amp; “C:\宏\”

喜欢

Pathname = ActiveWorkbook.Path&amp; “C:\宏\”

MsgBox路径名

并运行代码。这将显示Pathname,这是主要问题。如果您打算打开/修改的Excel文件与ActiveWorkbook位于同一目录中,这将正常工作

Pathname = ActiveWorkbook.Path&amp; “\”

(完成后删除Msgbox路径名。)

第二个值得关注的领域是Do While Loop。您目前将其设置为仅在文件名不等于“”时执行循环。但是,当您进入循环时,使用Filename = Dir()将Filename设置为“”。如果您不打算遍历该文件夹,则可以使用单个IF语句。如果您计划迭代文件夹,请继续执行Do While语句,但最终需要修改Filename = Dir()。

希望有所帮助。

答案 1 :(得分:1)

这可能是你的问题:

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

ActiveWorkbook.Path已经返回C:\YourPathToWorkbook,因此您的Pathname可能是这样的:

C:\yourpathtoworkbookC:\Macro\

您应该使用F8单步执行代码,并将它们悬停在黄色突出显示的变量上。