1

このコードを試してみましたが、うまくいかないようです。誰でも理由を教えてもらえますか?

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
4

2 に答える 2

2

2 つの懸念事項が見つかりました。初め、

パス名 = ActiveWorkbook.Path & "C:\Macro\"

これは、「C:\Users\ [USER NAME] \ [FILELOCATION]C:\Macro\」のようなものを返します (これは私の出力 C:\Users\Developer\DesktopC:\Macro\" でした)

これを確認する簡単な方法は、

メッセージボックスのパス名

パス名 = ActiveWorkbook.Path & "C:\Macro\"

お気に入り

パス名 = ActiveWorkbook.Path & "C:\Macro\"

メッセージボックスのパス名

コードを実行します。これにより、主な問題であるパス名が表示されます。開く/変更する予定の Excel ファイルが ActiveWorkbook と同じディレクトリにある場合、これは問題なく機能します。

パス名 = ActiveWorkbook.Path & "\"

(完了したら、Msgbox パス名を削除します。)

2 つ目の懸念事項は、Do While ループです。現在、ファイル名が「」に等しくない場合にのみループを実行するように設定されています。ただし、ループに入ると、Filename = Dir() で Filename を "" に設定します。フォルダーを反復処理する予定がない場合は、単一の IF ステートメントを使用できます。フォルダーを反復処理する予定がある場合は、Do While ステートメントを続行しますが、Filename = Dir() は最終的に変更する必要があります。

それが役立つことを願っています。

于 2013-02-09T04:37:40.763 に答える
1

これはおそらくあなたの問題です:

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

ActiveWorkbook.Pathすでに返さC:\YourPathToWorkbookれているので、Pathnameおそらく次のようなものです:

C:\yourpathtoworkbookC:\Macro\

F8 キーを押してコードをステップ実行し、変数が黄色で強調表示されたら、それらの上にマウスを移動する必要があります。

于 2013-02-09T04:39:06.827 に答える