プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。

XP エクセル2003使用です。

フォルダー内にある複数のすべてのエクセルを開くコードを
下記の解答をそのままコピーして実行しました。
(以下、このエクセルファイルを「実行ファイル.xls」と呼びます)

http://oshiete.goo.ne.jp/qa/2598781.html
(コードは最後尾に転記(※))

問題点は、実行ファイル.xlsから実行した
開きたいエクセルファイルは、
Workbook_Open()で自動実行して、
最後に、ThisWorkbook.Closeで閉じるので、
マクロの実行がループの途中(1回目)で
実行ファイル.xls のコードの実行も終了してしますことです。
(実行ファイル.xls のファイルは開いたままです)

つまり、ThisWorkbook.Closeでエクセルを閉じたときに
マクロの実行までもが終わってしまうので、
実行ファイル.xlsに戻ってきません。

この問題を解決するための方法として
下記2点を調べましたが、力不足で自己解決できません。

---------------------
1 

実行ファイル.xls から開きたいエクセルファイルを開く時に
何かしらの命令文または引数を記述しておく。

 → 解決のヒントを見つけることができませんでした。


---------------------


実行ファイルをエクセルではなく、VBS(VBScript)で記述する。

この場合、参考にしたコードを、
VBS用に書き換えれば良いと思いますが、
VBSは記述したことがないので、さっぱりです。

方法として間違っていなければ、
できれば、どなた様か当該コードを
VBS用で記述いただけませんでしょうか?

---------------------

一番良い方法が分からないので、
お力添えいただきたいのです。

よろしくお願いします。


---------------------
(※)参考コード
---------------------

Sub OpenAllBooks()
  Dim FileName As String
  Dim OpenedBook As Workbook
  Dim IsBookOpen As Boolean
  
  FileName = Dir("*.xls")
  Do While FileName <> ""
    If FileName <> ThisWorkbook.Name Then
      IsBookOpen = False
      For Each OpenedBook In Workbooks
        If OpenedBook.Name = FileName Then
          IsBookOpen = True
          Exit For
        End If
      Next
      If IsBookOpen = False Then
        Workbooks.Open (FileName)  ←この処理の後に戻ってこれません
      End If
    End If
    FileName = Dir()
  Loop
End Sub

A 回答 (2件)

こんにちは。



http://www016.upp.so-net.ne.jp/cheetah/xlvba/Exc … に書いてある方法はどうでしょうか。Application.EnableEvents をFalseにするとイベントプロシージャを無効にできるようです。

参考URL:http://www016.upp.so-net.ne.jp/cheetah/xlvba/Exc …
    • good
    • 0
この回答へのお礼

kotaro2014 さまご解答ありがとうございました。

EnableEventsとブックを閉じるタイミングを変更すればよかったのですね。。。助かりました。

余談ですが、VBSでもなんとか動作をできるまではなんとか仕掛っていたのですが、今度は、VBSからではアドインを立ち上げられないとかで困ってました。いずれ必要となるので、このあたりも解決しておきたかったのですが、意外とネットでもVBSの情報ってすくないですね。備えておきます(^^♪

今後ともよろしくお願いします。
ありがとうございました

お礼日時:2014/02/19 12:07

> If FileName <> ThisWorkbook.Name Then


があるから、
> Workbooks.Open (FileName) ←この処理の後に戻ってこれません
ここには行かないのでは?

この回答への補足

bin-chan さま 早速のご解答ありがとうございます。

結論からすると、

> Workbooks.Open (FileName) ←この処理の後に戻ってこれません

の処理は実行されています。

最初の

> If FileName <> ThisWorkbook.Name Then

は、

FileName = 開きたいファイル名
ThisWorkbook = この(実行)ファイル

で不平等が成立して、次の

 If OpenedBook.Name = FileName Then

の平等が成立せず、End Ifへと渡ります。


そして、If IsBookOpen = False Thenは

先に変数IsBookOpen = Falseが代入されているので、
平等が成立して、Workbooks.Open (FileName)が実行されています。

当方では、このような実行処理状況です。

補足日時:2014/02/17 23:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!