Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5298 / 13646 ツリー ←次へ | 前へ→

【51654】ループ中の他のBookの制御 若だんな 07/9/28(金) 15:24 質問[未読]
【51656】Re:ループ中の他のBookの制御 ichinose 07/9/28(金) 15:58 発言[未読]
【51657】Re:ループ中の他のBookの制御 若だんな 07/9/28(金) 16:15 お礼[未読]
【51660】Re:ループ中の他のBookの制御 ichinose 07/9/28(金) 19:36 発言[未読]
【51661】Re:ループ中の他のBookの制御 若だんな 07/9/28(金) 21:38 お礼[未読]

【51654】ループ中の他のBookの制御
質問  若だんな E-MAIL  - 07/9/28(金) 15:24 -

引用なし
パスワード
   ブックを2つ開いているとき、1つのブックで、例えば以下のようなループを回していると、もう1つのブックは制御できなくなります。

Do Until format(now(),"hh:mm") > "12:00"  'ある条件下でループ
  '処理
  DoEvents
Loop

OSに制御は戻しているので、ALT+Tabで他のブックがあるのは確認できますが、制御を移したり、表示することすらできません。
Application.ScreenUpdate = True
なども入れてみましたが駄目でした。

要は、多少重くなってもいいのですが、バックグラウンドでループを回して、別のシートで作業をしたいのですが、何かよい方法はあるでしょうか?

【51656】Re:ループ中の他のBookの制御
発言  ichinose  - 07/9/28(金) 15:58 -

引用なし
パスワード
   ▼若だんな さん:

こんにちは。
>ブックを2つ開いているとき、1つのブックで、例えば以下のようなループを回していると、もう1つのブックは制御できなくなります。
>
>Do Until format(now(),"hh:mm") > "12:00"  'ある条件下でループ
>  '処理
>  DoEvents
>Loop
>
>OSに制御は戻しているので、ALT+Tabで他のブックがあるのは確認できますが、制御を移したり、表示することすらできません。
>Application.ScreenUpdate = True
>なども入れてみましたが駄目でした。
↑これは、尚駄目ですよね!!

ブックの切り替えは、メニューバーの「ウインドウ」をクリックして
切り替えたいブックを指定してみたらどうでしょうか?
もっとも、処理が重いと使い物にならないかもしれませんが・・・。

あとは、Excelの別プロセスを起動させてそこでマクロを稼動させる方法なども
ありますが・・・。

検討してみてください。


>
>要は、多少重くなってもいいのですが、バックグラウンドでループを回して、別のシートで作業をしたいのですが、何かよい方法はあるでしょうか?

【51657】Re:ループ中の他のBookの制御
お礼  若だんな  - 07/9/28(金) 16:15 -

引用なし
パスワード
   ichinoseさん、早速の返信ありがとうございました。

>ブックの切り替えは、メニューバーの「ウインドウ」をクリックして
>切り替えたいブックを指定してみたらどうでしょうか?
>もっとも、処理が重いと使い物にならないかもしれませんが・・・。
この方法で簡単に切り替えることができました。
処理も思ったほど遅くはなかったのでこれでOKだと思いました。
的確なアドバイスありがとうございました。

>あとは、Excelの別プロセスを起動させてそこでマクロを稼動させる方法なども
>ありますが・・・。
これはVBなどで作るイメージですか?
参考までに、どのようやるのか教えていただけると勉強になります。

【51660】Re:ループ中の他のBookの制御
発言  ichinose  - 07/9/28(金) 19:36 -

引用なし
パスワード
   ▼若だんな さん:
こんばんは。

>>あとは、Excelの別プロセスを起動させてそこでマクロを稼動させる方法なども
>>ありますが・・・。
>これはVBなどで作るイメージですか?
>参考までに、どのようやるのか教えていただけると勉強になります。
あくまでも参考までに・・・。

例として、Book1.XlsとBook2.Xlsという二つのブックを用意します。

Book1.Xlsの標準モジュールに
'============================================================
Option Explicit
Private stt As Boolean
Sub book1()
  Do While stt = False
    Range("a1").Value = Range("a1").Value + 1
    DoEvents
  Loop
  
End Sub
'============================================================
Sub set_stop()
  stt = True
End Sub


book2.xlsの標準モジュールには、

'==================================
Option Explicit
Dim app As Application
'==================================
Sub start()
  Set app = CreateObject("excel.application")
  With app
    .Visible = True
    .Workbooks.Open ThisWorkbook.Path & "\book1.xls"
    .OnTime Now(), "book1"
    End With
End Sub
'==================================
Sub stopvba()
  app.Run "set_stop"
End Sub


Book1.XlsとBook2.Xlsは、同じフォルダ内に保存してください。

一度、Book1.Xls、Book2.Xls及び、Excelを閉じて下さい。

Book2.Xlsを開いてください。

「start」というマクロを実行してください。

別プロセスのExcelが起動し、そのExcelでBook1.Xlsが開きます。

マクロ「book1」が実行します。(これはセルA1に1を加算するコードです)

Book2.Xlsが開いているExcelでは、自由に操作が出来ます・・、よね?


Book1.Xlsのマクロ「start」の実行の中止は、
Book2.Xlsの「stopvba」を実行してください。

一例です。

【51661】Re:ループ中の他のBookの制御
お礼  若だんな  - 07/9/28(金) 21:38 -

引用なし
パスワード
   ichinose さん
なるほど。そういうことだったんですね。
参考になりました。
ありがとうございました。

5298 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free