• 締切済み

ループマクロ起動時に他のエクセルファイルが起動できない

VBAでメインループをずっとループさせ、 データが送られてきたらそれを受け取り処理をするマクロを作っています。 Do DoEvents Sleep 1 データが送られてきていれば処理 Loop という風にしているのですが、このマクロを起動中だと他のエクセルファイルが開けないのです。 他のファイルをダブルクリックしても、起動中のこのマクロのエクセルが前面にくるだけです。 なにか特別な処理をループ中にいれなければならないのでしょうか?

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 #3 で書いていただいて、内容が分かりました。 >マクロの概要としましては、シリアルポートからのデータ受信を待って、 >データが送られてきたらワークシートの表上に受信した値を代入。を繰り返すものです。 やはり、DDE のようですね。その種のものは多いです。 >Do >DoEvents >Sleep 1 > >データが送られてきていれば処理  ←この部分をプロシージャとして取り出す >Loop [OnData]プロパティを使ってみてください。 DDE または OLE でリンクされたデータが、Microsoft Excel に届いたときに実行されます。 ActiveSheet.OnData = "マクロ名"   または、 Application.OnData = "マクロ名" ただし、入力など待機状態になっていた場合は、マクロが止まってしまうことがあります。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

マクロ実行中に、普通に作業をしたいということですか? > データが送られてきたらそれを受け取り処理 の内容がよくわからないので不向きかもしれませんが、別プロセス の Excel.exe で実行してみるとか? 0. ご提示のコードを書いたブックを用意 Test.xls 1. Test.xls を開き、マクロ実行 2. 別プロセスの Excel を起動   -->例)スタートメニューから 以上で、ファイルのダブルクリックでブックは開けました。作業も できますし、Test.xls 側のマクロは実行され続けてます。 参考までに。

kararinxx
質問者

補足

回答ありがとうございます。 書き込み頂いた方法で、たしかに他のブックを開くことができました。 しかし、なるべくマクロを使用する側には特別な操作をさせないようにしたいのですが。 開発側でこの問題を解決するいい方法はないものでしょうか?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >メインループをずっとループさせ、データが送られてきたらそれを受け取り処理をするマクロを作っています まず、今のコードでは、CPUの負荷が強すぎるはずです。なぜ、Sleep を選んだのか、その理由はお分かりだと思います。ただし、Sleep 1 というのは、負荷を軽減してはいません。 Sleep の引数の「1」は、 1/1000 sec ですから、Excelにおいて、そのタイミングをずらすのは、せいぜい、500 程度です。また、DoEvents は、CPUへの割り込みを許します。 その延長上に、APIタイマーがありますが、しかし、そんなに簡単ではなさそうです。 これは、特殊なイベントの種類だと思います。 >このマクロを起動中だと他のエクセルファイルが開けないのです。 >他のファイルをダブルクリックしても、起動中のこのマクロのエクセルが前面にくるだけです。 DoEvents を使う使わないは別として、そのマクロが動いている状態で、他のブックの作業をしようとして割り込みを入れることが出来たら、場合によっては、マクロ自体が、待機するかエラーを出してしまうような気がします。その前に、ワークシートが重くてしょうがないです。それで、バックグラウンド で動くのは、OnTimeメソッドぐらいしかありません。 もうひとつは、どのようにしてデータが送られてくるか、そのデータの入手方法にもよります。データの入ってくる方法が、私の知っている範囲ですと、DDEですが、その入ってきたときに、実際は、マクロ(COM)が働いていることがあります。そうすると、同時にマクロは動きませんので、片方が死んでしまいます。 そのデータの入手方法はどのようなものですか? RSS などを使っているのではありませんか? 同じような質問は、ここのカテゴリでずいぶんありますが、回答者側が、同じ環境で動かせないので、成功例は少ないようです。

kararinxx
質問者

補足

回答ありがとうございます。 マクロの概要としましては、シリアルポートからのデータ受信を待って、 データが送られてきたらワークシートの表上に受信した値を代入。を繰り返すものです。 Wendy02様とKenKenSP様の説明で、他のブックが開けない理由は大体理解できました。

noname#140971
noname#140971
回答No.2

テストするために DoEvent をレムしていました。 外して下さい。

kararinxx
質問者

お礼

回答ありがとうございます。 しかし、試してみましたが変化はありませんでした。

noname#140971
noname#140971
回答No.1

Option Explicit Dim StopNow As Boolean Private Sub CommandButton1_Click()   Do     DoEvents     Pause 1   Loop Until StopNow End Sub Private Sub CommandButton2_Click()   StopNow = True End Sub <標準モジュール> Public Sub Pause(ByVal PauseTime As Single)   Dim Finish As Single      Finish = Timer + PauseTime   Do     'DoEvents   Loop Until Timer > Finish End Sub Sleep を上の Pause 関数に変更したらどうなりますか? Pause 関数は、待機中も CPU にプロセスを渡しています。 多分、これで解決か・・・。

関連するQ&A

  • エクセル マクロ ループ ファイル展開

    マクロ ループ処理について質問です。 test エクセルファイルのD1セルから下にファイル名を入れていき、その名前(フルパスで入れています)のファイルを開きつつ、シートを 26-4 に選択していくループ処理をしたいのですが、2週目から Sheets("26-4").Select  でエラーになります。 原因は、test ファイルがアクティブになっているからだと思うのですが、その対策の仕方が、検索してもうまく見つからなかったので、質問しました。 ご回答よろしくお願いします。 エクセル2010 使用しております。 Range("D1").Select i = 1 Do Until ActiveCell.Value = "" Workbooks.Open Filename:=Range("D" & i) '操作事項マクロ Sheets("26-4").Select Windows("test.xlsm").Activate ActiveCell.Offset(1, 0).Select '下にずれる i = i + 1 Loop End Sub

  • エクセルのHTMLのループ取得でフリーズする

    標題の件で、エクセルのマクロでMSHTMLを用いてあるサイトの1ページ目、2ページ目・・・とループ処理でHTMLを取得する際、3回目以上のループからマクロがフリーズ(フリーズする際のループ回数はランダムです)してしまいまい、フリーズせずに全ページを取得できるようにプログラムを直したいです。 【使用プログラム】※・・・は記載省略 ' ' // ・・・ Sub sample() ・・・ Do While ・・・ ・・・ Call untilReady(htmlDoc) ・・・ Loop End Sub Sub untilReady・・・ ※このSubの中身はサイト"エクセルの神髄"様  (http://excel-ubara.com/excelvba5/EXCELVBA222.html)  の"MSHTML.HTMLDocumentを使った方法です。"記載部の  Sub untilReady~End Subまでとほぼ同じで、  DoEventsとIf Now()~の間に sleep 100 を入れています ・・・End Sub ' ' // 回答者にはお礼しか言うことが出来ませんが、よろしくお願いします。

  • Excelマクロ処理の裏でWordを使いたい

    現在、Excelマクロツールの改修を行っています。 PJ毎のデータを集計するツールで、データが多い為処理に著しく時間がかかります。 軽量化による処理時間も限界なようなです。 せめて処理をバックグラウンドで走らせた状態で他の作業をしていたいのですが、マクロが動いている間、他のOfficeツール(WordやOutlook)もほとんど使えない状態になります。 繰り返しの多いループの部分では「DoEvents」で用いて、処理をシステムに戻すようにしているので、 固まってはいないのですが、WordやOutlookはほぼ反応しません。 VBA処理中に他のOfficeツールが使用できるように、VBAの記述で対応できないでしょうか? 自分の環境:  OS:Windows 7 Pro SP1 Office:Microsoft Office 2010 Plus よろしくお願いいたします。

  • エクセルのマクロでループ処理

    エクセルのマクロで、ループを使っています 下の様な感じです。 sub TEST() a: re=re+1 if ○○=○▲ THEN GOTO b: 処理・・・ goto a: b: end sub() ですが、これの書き方はDo WhileやDo Untilを使った方が 早く処理できるのでしょうか? また、書き方等もお教え下されば助かります。

  • VBAマクロを含んだEXCELファイルが開けません。

    どうも。 VBA初心者です。 VBAのマクロを含んだEXCELファイルを作成、保存したのですが、EXCELファイル自体が開けなくなってしまいました。 コードの内容は繰り返し制御の練習(WHILE LOOP)ですので、たいしたことはしていません。 原因がお分かりになる方は教えてください。

  • Excel 2003のVBAマクロデータをExcel 2007で見たい

    Excel 2003のVBAマクロデータをExcel 2007で見たい。 Excel 2003でVBAマクロを登録したExcelファイルがありますが、今回、Excel 2007をインストールして、該当ファイルを開いたところ、「マクロデータを削除しました。」とメッセージが出て、VBEを起動してもマクロが見えなくなりました。OSはWindowsXP SP3です。Excel 2003で登録したVBAマクロをExcel 2007で削除されないで、次の2点について、可能にするにはどうすればよいか、ご教示願います。 (1)マクロデータを残す方法。 (2)マクロ起動する方法。

  • wordのマクロからexcelの起動

    wordのマクロからexcelの起動方法が分かりません。 wordファイルのマクロからexcelファイル"abc.xls"を呼び出すには、vbaで具体的にどう記載すれば良いか教えて下さい。 vba初心者につき、宜しくお願いします。

  • Excel起動時にマクロを実行させない

     皆さんこんにちは。宜しくお願いしますm(_ _)m。  Excelでマクロを含んだファイルを作成していたのですが、急に「不正な処理」でファイルそのものが起動できなくなってしまいました。  どうやら、Excel起動時に実行されるマクロに問題が有るようなので、実行を中止したいのです。  ショートカットキーがあったと思うのですが、どうしても思い出せません。助けてくださいm(_ _)m!

  • エクセルのマクロ 回数分ループさせたい!

    VBA初心者です。よろしくお願いします。 エクセルの〝マクロの記録〟で作成したマクロ(マクロ名:オレンジジュース)を10回ループさせたいとき、どのように記述したらできるでしょうか。

  • 他のExcelファイルのVBAコードを検索したい

    他のExcelファイルに書かれたVBAコードに、ある特定のキーワード(パス名など)が使われているかを自動的に調べるためのVBAを書きたいと思っています。 仕事で使っているマクロが書かれたExcelファイルからある特定の処理をしているマクロを含むものを検索したいのですが、検索するExcelファイルが膨大なため、順番にExcelファイルを開いてVBAコードをチェックしていく工程をマクロ化したいのです。ファイルを順に開いていく処理はマクロ化できるのですが、書かれたVBAコードのチェックをどうしたらよいか悩んでいます。 「VBAコードに対して検索する」または「VBAコードを1行ずつ変数に代入する」、「モジュールシートをテキストファイルに出力する」などの処理が自動化できれば対応できそうなのですが、そのような処理をExcelVBAで作成できるでしょうか。 なお環境はWindowsXPのExcel2003です。 よろしくお願いいたします。

専門家に質問してみよう