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

+0

Ответ был дан в вашем первоначальном посте этого вопроса. – peterm

ответ

2

Я нашел 2 области, вызывающих озабоченность. Во-первых,

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

Это будет возвращать что-то похожее на «C: \ Users \ [имя пользователя] \ [FILELOCATION] C: \ Макрос \ "(Это был мой выход C: \ Users \ Developer \ DesktopC: \ Macro \")

простой способ проверить это, чтобы разместить

MsgBox Pathname

после

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

как

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

MsgBox Путь

и запустить код. Это покажет вам Pathname, которое является основной проблемой. Если файлы Excel вы планируете открыть/изменить в том же каталоге, что и ActiveWorkbook, это будет работать нормально

PathName = ActiveWorkbook.Path & «\»

(удалить MsgBox PathName, когда вы сделали .)

Вторая область, вызывающая озабоченность, - это Do While Loop. В настоящее время у вас установлен только цикл, если имя файла не равно "". Однако, когда вы вводите цикл, вы устанавливаете Filename в «" с Filename = Dir(). Если вы не планируете выполнять итерацию по папке, вы можете использовать один оператор IF. Если вы планируете выполнять итерацию по папке, продолжайте работу с инструкцией Do While, но в конечном итоге необходимо будет изменить имя файла = Dir().

Надеюсь, что это поможет.

1

Это, вероятно, ваш вопрос:

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

ActiveWorkbook.Path уже возвращает C:\YourPathToWorkbook так что ваш Pathname, вероятно, что-то вроде:

C:\yourpathtoworkbookC:\Macro\

Вы должны пройти через код с F8 и зависать над переменными, когда они выделены желтым цветом.

+1

+1 для полезного напоминания об использовании отладчика. Вы можете «нависнуть» или (мое предпочтение) вы можете добавить переменные и выражения в окно «Смотреть», чтобы вы могли видеть, как изменяются несколько переменных без зависания (также зависание не всегда дает вам то, что вы хотите). Вы также можете использовать Debug.print (ваше выражение) и посмотреть в окне «Немедленное» (которое вы можете найти в меню «Вид»). – Floris

+0

@Floris Полностью согласен с аспектом отладки. Я на самом деле предпочитаю окно местных жителей, но я заметил, что получить ответ здесь очень сложно, если вы не скорей бы быстро, поэтому, ради краткости, я оставил эту деталь –

Смежные вопросы