Excel VBAで既に開いているワークブックの一覧取得

このQ&Aのポイント
  • Excel VBAで既に開いているワークブックの一覧を取得する方法を教えてください。
  • Excel VBAのコードを使用して、既に開いているワークブックの一覧を取得したいです。
  • Excel VBAで既に開いているワークブックの名前を取得する方法を教えてください。
回答を見る
  • ベストアンサー

Word VBA

※行頭の下線はプログラムに関係ありません、インデントと解釈ください。 Excel VBAで既に開いているワークブックの一覧取得は Sub test() __Dim wb As Workbook __For Each wb In Workbooks ____Debug.Print wb.Name __Next wb End Sub で成功したのですが、 Word VBAで Sub test() __Dim wb As Object __For Each wb In CreateObject("Excel.Application").Workbooks ____Debug.Print wb.Name __Next wb End Sub では何も表示されません。 問題解決のための知識を与えてくださる方、宜しくお願いします。

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

  • ベストアンサー
  • masnoske
  • ベストアンサー率35% (67/190)
回答No.3

[No.1] です。 すでに解決済みと思いますが、一応回答しておきますね。 Sub test() __Dim wb As Object __For Each wb In GetObject(, "Excel.Application").Workbooks ____Debug.Print wb.Name __Next wb End Sub

その他の回答 (2)

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

全くおかしい。その分野に、不勉強な時に、類推でやるのも「あり」だが、簡単に行かないことが多い。 Books、DocumentsのレベルはFileです。 (For Each wb In CreateObject("Excel.Application").Workbooksは珍奇です) ワードの文書はWorkbooksではない。生兵法」。 そしてVBA(Word)でやるより、VBScriptを勧める。 ーー 例 docmのファイル名一覧 Sub test01() Dim fso Set fso = CreateObject("Scripting.FileSystemObject") Dim foldern As String fldern = "C:\Users\??\XXX" Dim folder Set folder = fso.getFolder(fldern) ' ファイル一覧 Dim file i = 1 For Each file In folder.Files If fso.GetExtensionName(file) = "docm" Then Debug.Print file.Name End If i = i + 1 If i > 1000 Then Exit For  '必ずしも必要ない」 Next End Sub こんなところへ質問せずに、Googleで「vbscript ファイル一覧」などで照会し、コードを真似し、一部修正したほうがまし。 ーー このテーマに関しては、Dir関数を使う方法がある。WEB照会して勉強!。

kazukazu72
質問者

補足

勘違いされているようなので、 Excelのブックからデータを参照してWordへ書き込む処理をするにあたって・・・ Excel VBAからWord VBAに移行したプログラムです。 あくまでもWord VBAでExcelのブックからデータを参照する過程での処理です。 「ワードの文書はWorkbooksではない。」は百も承知です。

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.1

CreateObject だと、そのExcelで開いたブックが操作対象になります。 別途開いたブックを操作対象にするなら、GetObject でExcel を捉える必要があったかと。

関連するQ&A

  • どちらを使った方がいいでしょうか?

    Sub test1() Dim ws As Worksheet For Each ws In Worksheets Debug.Print ws.Name Next End Sub Sub test2() Dim ws As Variant For Each ws In Worksheets Debug.Print ws.Name Next End Sub どちらも問題なく実行されますが、 VBA的にどちらを使った方がいいでしょうか?

  • 「.Name」がエラーになる理由は?

    Sub 全てのシート名を取得する() Dim w As Worksheet Dim 行 As Long 行 = 1 For Each w In Worksheets Debug.Print w.Name 行 = 行 + 1 Next End Sub Sub 全てのブック名を取得する() Dim wb As Workbooks Dim 行 As Long 行 = 1 For Each wb In Workbooks Debug.Print wb.Name 行 = 行 + 1 Next End Sub 標準モジュールに ふたつのプロシージャーを作ったのですが 「全てのシート名を取得する」は問題なく動作しますが 「全てのブック名を取得する」は「.Name」の部分が 「コンパイルエラー メソッドまたはデータ メンバが見つかりません。」 (Error 461) になってしまいます。 なぜでしょうか? 全てのブック名を取得することはできないのですか?

  • vbaコードが遅い

    当方access2003、XP、メモリ2G、コア2DUOなのですが Sub 取得() Dim DB As DAO.Database Dim T As TableDef Set DB = CurrentDb Debug.Print "開始:" & Now For Each T In DB.TableDefs 'ここでやたら時間がかかる Debug.Print T.Name & "取得時間:" & Now Next End Sub これを実行すると、 For Each T In DB.TableDefs を通る時に5秒くらい時間がかかりますがそういうものなのでしょうか?

  • ブックのすべてのシート名を取得するコード

    何が間違いなんでしょうか? エクセル2003です。 ブックのすべてのシート名を取得するコードを考えてるのですが なぜか一番左のシート名しか取得できません。 コードは↓です。 ----------------------------------- Sub test01() Dim x As Workbook For Each x In Workbooks Debug.Print ActiveSheet.Name Next End Sub ----------------------------------- できないので「Workbooks」の部分を「ThisWorkbook」に変えてみたところ 実行時エラーになってしまいました。 ご教授よろしくお願いします。

  • VBAでの複雑な関数の作動方法

    VBAのプログラミングで関数「=LEN($A$1)-LEN(SUBSTITUTE($A$1,"1",""))」を反映する方法について質問です。 以下プログラミングなら作動するのですが Sub Sample() Dim Wb As Workbook For Each Wb In Application.Workbooks Wb.Worksheets("Sheet1").Range("B1").Formula = "=LEN(A1)" Next Wb End Sub 上記のような複雑な関数になると「"」のせいなのかエラーが出て動作しません。 VBAプログラミングでは作動不可能なんでしょうか?

  • 一回のループで次のオブジェクトの値も同時に取得する

    一回のループで次のオブジェクトの値も同時に取得するにはどのようなコードを書けばよいですか? 例えば、 ブックにシートが Sheet1 Sheet2 Sheet3 あり、 Sub Sample1() Dim s As Worksheet For Each s In Worksheets Debug.Print s.Name Next End Sub のように、全てのシート名を取得する場合、 Sheet1とSheet2を1回のループで同時に取得する方法はありますか? Sub Sample1() Dim s As Worksheet For Each s In Worksheets Debug.Print s.Name   Debug.Print s+1.Name Next End Sub みたいな方法があるのか知りたいです。 よろしくお願いします。

  • インプットボックスからファイルを開くようにしました。しかし、すでに開い

    インプットボックスからファイルを開くようにしました。しかし、すでに開いているか確認する項目がうまく作動しません。どのように記述するか教えて頂けませんでしょうか。 Sub Macro1() Dim wb As Workbook Dim psw As Boolean Dim fil As String fil = InputBox("ファイル名入力") For Each wb In Workbooks ’すでに開いているか確認。二重に開くのを防止 If wb.Name = "fil.xls" Then ’ここの部分がうまく作動してくれません。 psw = True Exit For End If Next wb If psw = False Then Workbooks.Open Path & "C:¥" & fil End If End Sub

  • 現在開いているbook全てを対象に処理したい

    Excel VBA で質問です。 現在開いている全てのbookを対象に処理したい場合どうすればよろしいでしょうか? *内容* Sub グラフ参照先変更() Dim wb As Workbooks Dim ws As Worksheet Dim myAd As String Dim myChart As ChartObject myAd = "A40:A70,I40:I70,N40:N70,S40:S70,X40:X70" >For Each wb In Workbooks For Each ws In Worksheets For Each myChart In ws.ChartObjects myChart.Chart.SetSourceData Source:=ws.Range(myAd), PlotBy:=xlColumns Next myChart Next ws Next wb End Sub >で現在エラーが起きています。 アドバイスよろしくお願い致します。

  • VBAでファイルを開いてないときに開くコード

    いつもお世話になります。 VBA(Excel2007)の初心者です。 目的のファイルが開いていない時は開き、 既に開いている時は何もしない。 という処理をしたいと思い以下のコードを 書きました。 Dim wb As Workbook Dim myfilename As String For Each wb In Workbooks If wb.Name = "予定表.xls" Then Exit For Else myfilename = "\\___\__\予定表.xls" Workbooks.Open Filename:=myfilename End If Next wb 実行したら何度もファイルを開こうとしてしまいます。 どこに問題があるのでしょうか? ちなみにこれは"予定表.xls"のセルを参照したくて ある処理の前に実行するつもりなのですが、 別のブックのセルを参照するときはやはり そのブックを開かなくてはならないのでしょうか? 何卒よろしくお願いします。

  • フォーム上の全てのコントロールを取得したい

    フォーム上の全てのコントロールを取得したいです。 (サブフォームも含め) 自分なりにVBAで考えてみたのがこれです。 Sub test() Dim 数 As Long For Each 数 In Form_フォーム1.Controls.Count ’Debug.Print ? End If Next End Sub でもこれだけでもデバックしてみると 「コンハ゜イルエラー for Eachは、コレクション オブジェクトまたは配列でのみ繰り返しを実行します。」 となります。 答えを教えてください! よろしくお願いします。 (アクセス2003です)

専門家に質問してみよう