• ベストアンサー

ExcelVBA 起動しているブック数を取得したい

ExcelVBAで、現在起動しているブック数を数えたいと思い下記コードを書きました。 eCnt = Workbooks.Count ですが、スタートボタン→プログラム→MicrosoftOffice→Excelというように Excelを起動していった場合、アプリケーションウィンドウが何個も起動し、 Workbooks.Countでは起動している数を取得できませんでした。 このような場合、どうすれば起動ブック数を取得できますでしょうか? ご存知の方いらっしゃいましたら教えてください! WinXP SP3、Excel2003 SP3を使用しています。 よろしくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

ExcelVBAは,自分エクセルの中のことしか操作できませんので,通常「他のエクセル」の事は知るよしもありませんし,操作する(「ブックの数を調べる」のような)事もできません。 余談としてご紹介するなら,たとえば次のような例があります http://officetanaka.net/excel/vba/tips/tips61.htm 資料にもさらっと触れられていますが,どうしても踏み込みたいなら通常はWindowsAPIなどでデータを取得したりします。

maikimaiki
質問者

お礼

早々に回答をありがとうございました! お礼が大変遅くなり申し訳ありません!! (実はインフルエンザで休んでいまして・・・スミマセン ><) 紹介頂いたWordのTasksコレクション、試してみました。 別インスタンスで開いていたExcelが全て取得でき、こんなのもあるのかーと勉強になりました。 この方法もやってみて、不具合等確認したいと思います。 どうもどうもありがとうございました!

その他の回答 (1)

  • kawai985
  • ベストアンサー率68% (17/25)
回答No.2

http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200809/08090125.txt 情報を見ましたが未検証です 参考まで 複数起動でブック数を把握しなければならない状況というのは どんな理由からでしょうか よければ詳しく教えてください

maikimaiki
質問者

お礼

ご紹介頂いたページの中にやりたいことが実現できるコードがありました。自分でも勉強しながら使わせて頂きたいと思います。本当にどうもありがとうございました。

maikimaiki
質問者

補足

早々に回答をありがとうございました! お礼が大変遅くなり申し訳ありません!! (実はインフルエンザで休んでいまして・・・スミマセン ><) APIはネットのコードを切り貼りして使ったことしかなく、今回ご紹介頂いたページは大変勉強になります。ありがとうございます。 複数起動でブックが開く状況は、私のPCではほとんど無く、ユーザーさんのところで起こる現象です。 ユーザーさんは、ブック起動と共に計算方法を「自動・手動」と切り替えるツールバーを表示するマクロを使っています(ネットで紹介されていたマクロです)。 マクロではExcelを終了する時に、追加したツールバーをDeleteしているのですが、複数起動でブックが開いている状態で1つExcelを終了すると、ツールバーがDeleteされ、2個目のExcelを終了する時に、ツールバーが存在しないために実行時エラーが出てしまいます。 (とりあえずOn Error Resume Nextで実行時エラーは出ない状態にしてあります) そのため、開いているブックを全て取得して、ループでツールバーを表示したり、Deleteしたりしようと考えました(もっといい方法があるとは思うのですが・・・ない頭でこのように考えまして・・・)。 それで質問させて頂いた次第です。 とにかく書き込みが遅くなり、申し訳ありませんでした。

関連するQ&A

  • VBA 複数のEXCEL.EXEのブック一覧を取得

    今日は、質問させていただきます。 どうぞよろしくお願いいたします。 環境: EXCEL2007 でございます。 複数のEXCEL.EXEが起動している際に、それらで開かれている全てのブック名を取得したい次第でございます。 試しにWorkbooks.Countしてまいりましたが、同一のEXCEL.EXE内のブックしか検出出来ませんでした。。。 何か方法を思いつかれる方がいらっしゃいましたら、是非アドバイスいただけないでしょうか。 もしお詳しい方がいらっしゃいましたら、何卒よろしくお願いいたします。

  • EXCEL VBAで2つEXCELを起動したときのブック名取得の方法

    for each *** In workbooks・・・Nextで現在開いているexcelのブック名をすべて取得することができますが、2つめのexcelを起動し、そこで開いたブック名は取得することができません。 プロシージャは個人用マクロブックに記載しているのですが、複数起動したexcelのすべてのブック名を取得する方法をどなたかご存知の方いませんでしょうか? excel2007を使用しています。よろしくお願いします。

  • Excel2010 VBA終了時に強制終了する

    Excel2003、2007で実行した場合は正常終了するが Excel2010で実行するとVBA終了時に強制終了します。 処理は、マクロありブックからマクロなしブックを作成するために、 新規ブックを作成しマクロありブックからシートを移動する処理です。 VBA起動は、フォームコントロールから行っています。 VBA終了時に(End Sub)後にEXCELがなぜか強制終了します。 (Microsoft Excel は動作を停止しました。のメッセージが表示される) なお、 ・フォームコントロールから実行した場合はEXCELが強制終了し、   デバックモードで実行した場合は強制終了しません。  ・マクロありファイルの種類:Excel 97-2003ブック  ・★★★のソースが含まれていると、Excelが強制終了します。 以下、ソース。 Sub ファイル保存()   'マクロなしファイルを作成 CreateNoMacroBook End Sub '←ここで異常終了が発生する。 Sub CreateNoMacroBook() Dim fname As String Dim ns As Integer Dim cnt As Integer Dim i As Integer 'マクロありブックの名前を取得 fname = ActiveWorkbook.Name 'マクロありブックのシート数を取得 cnt = ActiveWorkbook.Worksheets.Count 'すべてのシートをMoveするとエラーになるのでシートを追加 Worksheets.Add After:=Worksheets(Worksheets.Count) '新規ブック作成時のデフォルトのシート数を保管 ns = Application.SheetsInNewWorkbook '新規ブック作成時のシート数を変更 Application.SheetsInNewWorkbook = 1 '新規ブック作成 Workbooks.Add '新規ブック作成時のデフォルトのシート数に戻す Application.SheetsInNewWorkbook = ns 'マクロありブックのシートを新規ブックの"Sheet1"シートの前に移動 For i = 1 To cnt Workbooks(fname).Worksheets(1).Move Before:=Workbooks(Workbooks.Count).Worksheets("Sheet1")  '★★★ Next i '表示用に新規ブックの一枚目のシートをアクティブにする Workbooks(Workbooks.Count).Worksheets(1).Activate Application.DisplayAlerts = False '新規ブックのデフォルトシート"Sheet1"を削除する Workbooks(Workbooks.Count).Worksheets("Sheet1").Delete Workbooks(Workbooks.Count).Activate Application.DisplayAlerts = True End Sub

  • ExcelVBAで選択範囲のみ新規ブックにコピペ(EXCEL2007)

    ExcelVBAで選択範囲のみ新規ブックにコピペ(EXCEL2007) EXCEL2007にて下記VBAプログラムを実行すると、 ActiveSheet.PasteSpecialの部分で 「アプリケーション定義またはオブジェクト定義のエラーです。」 とエラーメッセージがでます。 なぜなのでしょうか? お願いいたします。 '選択範囲コピー Range("AllData").Copy '新規ブックの追加 Set WB = Workbooks.add WB.Activate ActiveSheet.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False

  • ExcelVBA:自己のBook名を取得したい

    WindowsXP-Proです。 Excelヴァージョンは2003です。 ExcelVBAでコーディングしています。 で、自分自身(つまり、このVBAコードを記述しているExcel本体)のBook名を取得したいのですが、何か関数は用意されていますでしょうか? 自分自身のBook名を取得したい理由は、VBAコードを記述しているExcel本体のファイル名(Book名)の名前が変更されても、VBAが正常に機能するように、今現在のBook名を取得したいのです。 複数のExcelファイルを、このVBAで操作しているため、 Workbooks("本体のBook名").Activate を用いており、仮にファイル名(本体のBook名)の名前が変更されても、VBAが正常に機能できるように、"本体のBook名"部分を固定ではなく、可変で持てるようにしたいからです。

  • ExcelVBA ユーザーフォームのコードがない

    いつもお世話になっています。 Excel vbaで質問させてください。 あるExcelブック(test.xlsとします)を開くと、ユーザーフォーム(と思う)が表示されます。 (この時、Excelアプリケーションは「表示」されていてモーダルの状態です) ユーザーフォームで日付を選び、「これでOK」ボタンをクリックすると 新規ブックとして「text_0614.xls」が出来て、これが表示ブックとなります。 (元のtest.xlsは閉じられています) vbaコードの修正がしたくて、VBEから作業しようとしたところ ユーザーフォームモジュールも、標準モジュールも何も見当たりません。 Thisworkbookのイベントも何も書いてありません。 プロジェクトにパスワードがかかっているのかと思いましたが、もしそうだとしても プロジェクトウィンドウに、「フォーム」というフォルダは表示されると思いますし、 また、ダブルクリックしてもパスワードを求められることがありませんので パスワードがかかっているようには見えません。 これはExcelVBAのユーザーフォームじゃないのでしょうか?(VB?) または、もし、この「フォーム」フォルダごと、ユーザーに見せないやり方があるのでしょうか? どなたかご存知の方いらっしゃいましたらご教示ください! WinXP SP3 Excel2003 SP3 使用です。 どうぞよろしくお願いします。

  • VB2005での起動しているフォーム数

    アプリケーションフレームワークを有効にするのチェックを外した状態で、起動しているフォーム数が知りたいのですが、どのようなコードを書けば取得できるのでしょうか? チェックを入れた状態なら、My.Application.OpenForms.Countで起動しているフォーム数が取得できたのですが。

  • ブックなしの空のアプリケーションだけ立ち上げたい

    win7、エクセル2007を入れています、 スタート→すべてのプログラム →Microsoft Office Excel 2007 でエクセルを新規で立ちあげた時に、 アプリケーションの中に、保存してないBook1が表示されますが、 Bookを作らない方法はありますか? やりたい事は、 スタート→すべてのプログラム →Microsoft Office Excel 2007 で、エクセルのブックなしの空のアプリケーションだけ立ち上げたいです。 ご教授よろしくお願いします。

  • Excelでブックが開きません

    WinXPでExcel2003を使用しています。 作成済みのブックをダブルクリックで開こうとすると、Excelが起動するだけで、ブックが開かなくなってしまいました。以前は、問題なかったのですが・・・ 何かの設定がおかしいのでしょうか?

  • ExcelVBAでのページ設定

    ExcelVBAで、新しいブックを開き、そのページ設定をしたく、以下のような記述をしたのですが、余白の値が変わりません。 Private Sub Workbook_Open() Workbooks.Add With ActiveSheet.PageSetup .TopMargin = Application.CentimetersToPoints(1.7) .BottomMargin = Application.CentimetersToPoints(1.7) .LeftMargin = Application.CentimetersToPoints(0.9) .RightMargin = Application.CentimetersToPoints(1.1) .HeaderMargin = Application.CentimetersToPoints(1.3) .FooterMargin = Application.CentimetersToPoints(1.3) End With (以下省略) Workbooks.Addを記述せず、新しいをブックを開かなければ、思い通りの動作をします。 外部ファイルを読み込んで、帳票を作るVBAなので、起動時に新しいブックを開きページ設定をしたいのですが、Workbook_Open()で、このような使い方は出来ないのでしょうか? よろしくお願いします。 尚、会社のLANからgooの閲覧が規制されており、返事が遅れるかもしれません。ご理解の程、お願いします。

専門家に質問してみよう