• ベストアンサー

フォルダ内のファイルに順番にマクロ実行(VBA)

こんにちは。 いつもこのサイトにはお世話になっています。  いま、WORDマクロで、あるプログラムを作成したのですが、現在の状態だと、ファイルにマクロを実行させたい場合、そのファイルを開いてマクロを実行するしかありません。  そうではなくて、指定されたフォルダの中にあるファイルのうち、rtf拡張子で終わっているものに順番に自動的にマクロを実行するというようなプログラムは書けないのでしょうか。  プログラムのなかに、ファイルのパスを指定してそのファイルに実行する方法は分かったのですが、フォルダだけ指定しておいて(というよりユーザにテキストボックスで指定させて)、そのフォルダに入っているrtfファイルすべてにマクロを実行する方法はありますでしょうか?    もしありましたら教えていただいたいと思い投稿しました。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

ある指定したフォルダ内の、ファイル名が全て捉えられれば良いのでしょう。 そうであれば下記を参考に。誤解していたら済みません。 Sub test02() Const sPATH = "c:\My Documents\" 'ファイルの保管場所 Dim sFILENAME As String 'ファイル名 sFILENAME = Dir(sPATH & "*.doc") 'ファイルのパスと種類を指定 While sFILENAME <> "" '空文字以外の場合ループ MsgBox "ファイル名 " & sFILENAME sFILENAME = Dir() '引数無しのDir関数を呼び出すと次のファイル名を返す Wend End Sub

crooked_man
質問者

お礼

いただいたコードで試したら、うまくいきました。 1ヶ月くらい、悩んでいたので、 たいへん助かりました。 お世話になりました!

crooked_man
質問者

補足

ありがとうございます。 フォルダ内のファイルの一覧が手に入れば、それらにぜんぶマクロを実行すればいいので、できると思います。 Dirはそういうふうにも使えるんですね、しりませんでした。さっそく、試してみます。 どうもありがとうございます!

その他の回答 (1)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

何がしたいのかよく分からないのですが、下記サンプルを参考に各ファイルに何かをされて下さい。 フォルダを指定して、そのフォルダのファイル一覧を取得するサンプル。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html ExcelVBAでWord(.doc)ファイルを操作する(2) http://members.at.infoseek.co.jp/kenchan_h/index21.html

crooked_man
質問者

補足

どうもありがとうございます。 フォルダのファイル一覧が取得できれば、あとは問題ないと思います。どうもありがとうございました!

関連するQ&A

  • ACCESSマクロ:アプリの実行でUWSCファイル

    ACCESS2010でマクロを作っています。 その中のアクションでアプリケーションの実行を選び、uwscのファイルをフルパス指定していますが、起動しません。ファイルのフルパスの前に.exeファイルのフルパスを置いてもだめでした。 実行できるアプリケーションでuwscファイルを動かすには、どのようにしたらよいでしょうか。.batファイル化しないとだめでしょうか。 どうぞよろしくお願いします。

  • スタートアップ どの順番で実行されるのでしょうか?

    win7です。 スタートアップにいくつかのプログラムをいれているのですが、 その順番は何で決まるのでしょうか? どの順番で実行されるのでしょうか? スタートアップにいれているプログラムは エクセルファイルやワードファイルやIEです。

  • (VBA)フォルダの中の複数のテキストファイルをエクセルに取り込みたい

    フォルダの中に複数のテキストファイルがあります。 それをVBAで1シートに1テキストファイルづつで取り込んで(区切り文字(#)、列のデータ形式(文字列)を指定して)作成済みのマクロを実行し、出力させたいのですが。。 データが大きいので5シートで1つのファイルにしたいです。フォルダの中にはテキストファイルが100ほどあるので、結果、エクセルファイルが20できればいいのですが。。 できればデスクトップに新しいフォルダが作成されてその中に出力されていくようにしたいです。 お力を貸してください。よろしくお願いします。

  • 同じフォルダ内にあるファイルを開くマクロ

    いつもお世話になります。 EXCEl2000で、フォルダ内に2コのエクセルファイル「A.xls」「B.xls」があり、「A.xls」でマクロを実行する際に、「B.xls」を開きたいのですが、ファイルのパスを設定すると、フォルダを別の場所に動かしたり、別のパソコンにコピーすると開けなくなります。 「同じフォルダの中にある「B.xls」を開く」という命令文の作成は可能でしょうか。

  • エクセル起動時、自動的にマクロを実行する

    エクセルファイルを開いたとき、自動的にマクロを 組み込む方法で、「XLSTARTフォルダ」にマクロファイル を置くという方法を最近知りました。 任意のエクセルファイルを開いたときのみ XLSTARTフォルダのマクロファイルを実行する 方法はないのでしょうか? 普通にエクセルを使いたいときでも、マクロが組み込まれて しまい、とても困っています。 例えば、指定のフォルダの中にあるエクセルファイルであれば XLSTARTフォルダのマクロファイルを実行する という、操作ができたりすれば、とてもよいのですが。 何か良い方法があれば、教えていただきたいです。

  • 【VBA】 フォルダの全ファイルを取得したい

    あるフォルダ内のCSVファイル全てを取得してひとつのファイルにまとめようと思っています。 下記の条件が必要なのですが、どのように記述したらよいでしょうか? ・プログラム内にフォルダのファイルパスを  記述せずにユーザにフォルダを指定させたい。  (テキストボックスはエラーが起こりやすいので避けたい) ・フォルダ内のファイルをひとつずつ開いて特定のシートに合算させたい  (合算処理はわかるのですが、そのほかがわかりません・・・) お手数ですが、どなたかわかる方がいたら 教えてください

  • 異なるフォルダのファイルを順番に開く

    office2016 今、異なる5つのフォルダでタスクスケジューラにてファイルを開いて実行しているのですが、たまにエラーで停止してしまいます。原因は、1つ目のファイルの処理が終了しないのに2つ目のファイルが起動されたことによるもの?と想定しています。タスクスケジューラの実行時間をずらしても解決はできそうなのですが、もっと確実な方法で対処したく。 5つのファイルは、それぞれ、ファイルが開かれたらoracleからマスターデータを取得して、ある処理実行したらサーブして終了、ファイルを閉じる という構成になっています。 5つのファイルは下記のマクロで構成しています。 Private Sub Workbook_Open() ’いろんな処理 ThisWorkbook.Close End Sub ファイル名が同じものがある関係で、 1つ目のファイルを開き、実行して閉じられたら 2つ目のファイルを開き、実行して閉じられたら 3つ目… という風に順番に実行する様な構成にしたく、とりあえず2つのファイルを順番に起動するマクロを検討しました。 file_open1が1つ目のファイルを開くマクロ file_open2が2つ目のファイルを開くマクロ なのですが、1つ目のファイルが開いて閉じるところまでは動作しますが、2つ目のファイルが開きません。 2つ目のファイルを開く条件、 OpenCheck = 0 And Workbooks("ファイルオープン.xlsm").Worksheets("sheet1").Range("A1") = 1 でA1セルには1が設定されていて、Debug.Print OpenCheckの結果も0になってます。なぜ2つ目のファイルが起動されないのかの原因と、もっとシンプルに起動可能な構成があれば教えていただきたく。 Sub file_open1() Path = "\\A" Workbooks.Open (Path & "\" & "a.xlsm") Workbooks("ファイルオープン.xlsm").Worksheets("sheet1").Range("A1") = 1 Dim wbName As String Dim OpenCheck As Boolean wbName = "a.xlsm" OpenCheck = call_BookOpenCheck(wbName) ' If OpenCheck = 0 And Workbooks("ファイルオープン.xlsm").Worksheets("sheet1").Range("A1") = 1 Then file_open2 Else End If Debug.Print OpenCheck End Sub Sub file_open2() Workbooks("ファイルオープン.xlsm").Worksheets("sheet1").Range("A2") = 1 ' Dim wbName As String Dim OpenCheck As Boolean wbName = "b.xlsm" OpenCheck = call_BookOpenCheck(wbName) Path = "\\B" Workbooks.Open (Path & "\" & "b.xlsm") Debug.Print OpenCheck End Sub Public Function call_BookOpenCheck(wbName As String) As Boolean Dim temp As Workbook '■■ブックが開いていない状態として保存 call_BookOpenCheck = False For Each temp In Workbooks '■■指定されたブックが開いているかチェックする If temp.Name = wbName Then '■■■指定されたブックが開いていればTrueでFunctionを抜ける call_BookOpenCheck = True Exit Function End If Next temp End Function 5つのフォルダとフィル名は下記の様な感じです。   フォルダ ファイル名 1 A    a 2 B    b 3 C    a 4 D    d 5 E    e

  • ファイル名を指定して実行について

    「ファイル名を指定して実行」という機能について、 教えて下さい。 エクスプローラーを開いて、どんどんフォルダーを開くのを 省略?するために「ファイル名を指定して実行」で、 パス名と言っていいのでしょうか、 たとえば、Cドライブの中のプログラムファイルの中の・・・ っていうのを入力して、一発でその見たいファイルまで 行くことができると思うのですが、 その時に¥マークを「2つ重ねていた」ような気がするのですが・・・。 今、久しぶりにやってみたら、¥マークを2つ重ねなくても、 1つで大丈夫だったのですが、 ¥マークを2つ重ねる方法ってどういう時に 使うのでしょうか? すごく前に人から教わった方法なので、 記憶があいまいなので、改めて、 教えて頂けたらと思います。 よろしくお願いいたします。

  • フォルダー内のファイルとリンクするマクロVBA

    エクセルのマクロ機能を使い、エクセルのセルに管理番号入力し選択してマクロ実行すると、 自動でセルに入力した管理番号と同じフォルダー名の物を指定した場所に作成し、ハイパーリンクするVBAを 見よう見まねで作成しました。 この作成したVBAに追加機能を付けたいのですが、 WEBで検索したのですが、なかなか実行したい事が合う内容のものが見つからず、 マクロ初心者で何をどうすれば良いのか解りません。 大変申し訳ありませんが、どなたか教えて頂けませんでしょうか? 追加したい機能は、例としてA列の4と5の行を結合(結合しない場合もある)して管理番号を入力し、 自動で管理番号名のと同じフォルダーを作成しハイパーリンクした後に、 手動で、作成したフォルダーの中にファイルを入れる。 その後、行に同じファイル名を入力し、その行を選択してファイル名が同じ物があればハイパーリンクする様にしたい。 添付の画像ですと、管理番号を付けるのはA列で順番に番号を付けていきます。 1つのフォルダーの中に複数ファイルを入れる場合は、列を結合して1つの管理番号にし、 同じ行に並ぶフォルダーのE列(列の場所は変わる場合もあり)にフォルダーの中のファイル名を入力して、 フォルダー内同期リンク実行ボタンを押してファイルをハイパーリンクしたい。 ※管理番号で列に対し行は1:1の時もあれば、ファイルの数により、列を結合し1:2~1:10以上もある。 ※自動で管理番号名のと同じフォルダーを作成しハイパーリンクするVBAは下記で作ったのですが、   それをWEBで、似た様な内容のものを少し参考に編集しると、現在の機能も使えなくなってしまったりと困っています。   難しい。 Sub MakeHyLink() Dim wkStr As String If ActiveCell.Column <> 1 Then Exit Sub If ActiveCell.Value = "" Then MsgBox "アクティブセルは未入力、やり直し" Exit Sub End If wkStr = ThisWorkbook.path & "\TEST\" & ActiveCell.Value If Dir(wkStr, vbDirectory) = "" Then MsgBox "フォルダー:" & wkStr & vbLf & " を、作成します。" MkDir wkStr Else MsgBox "フォルダー:" & wkStr & vbLf & " は、存在します。" End If ActiveSheet.Hyperlinks.Add Anchor:=ActiveCell, Address:=wkStr End Sub

  • エクセルVBAを利用したフォルダ内にあるファイルの指定エクセルシート貼り付け

    フォルダ内にある任意のファイル(拡張子のないテキストデータ)を開き、指定されたエクセルのシートに貼り付けするといった方法がわかりません。 どなたか分かる人がいましたら教えていただきたいです。 現在openなどを使用していますがファイルを指定すれば実行できるのですが任意のファイルになるとエラーになってしまいます。

専門家に質問してみよう