2013-02-09 59 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