
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
こんにちは。
#3 で書いていただいて、内容が分かりました。
>マクロの概要としましては、シリアルポートからのデータ受信を待って、
>データが送られてきたらワークシートの表上に受信した値を代入。を繰り返すものです。
やはり、DDE のようですね。その種のものは多いです。
>Do
>DoEvents
>Sleep 1
>
>データが送られてきていれば処理 ←この部分をプロシージャとして取り出す
>Loop
[OnData]プロパティを使ってみてください。
DDE または OLE でリンクされたデータが、Microsoft Excel に届いたときに実行されます。
ActiveSheet.OnData = "マクロ名"
または、
Application.OnData = "マクロ名"
ただし、入力など待機状態になっていた場合は、マクロが止まってしまうことがあります。
No.4
- 回答日時:
マクロ実行中に、普通に作業をしたいということですか?
> データが送られてきたらそれを受け取り処理
の内容がよくわからないので不向きかもしれませんが、別プロセス
の Excel.exe で実行してみるとか?
0. ご提示のコードを書いたブックを用意 Test.xls
1. Test.xls を開き、マクロ実行
2. 別プロセスの Excel を起動
-->例)スタートメニューから
以上で、ファイルのダブルクリックでブックは開けました。作業も
できますし、Test.xls 側のマクロは実行され続けてます。
参考までに。
この回答への補足
回答ありがとうございます。
書き込み頂いた方法で、たしかに他のブックを開くことができました。
しかし、なるべくマクロを使用する側には特別な操作をさせないようにしたいのですが。
開発側でこの問題を解決するいい方法はないものでしょうか?
No.3
- 回答日時:
こんにちは。
>メインループをずっとループさせ、データが送られてきたらそれを受け取り処理をするマクロを作っています
まず、今のコードでは、CPUの負荷が強すぎるはずです。なぜ、Sleep を選んだのか、その理由はお分かりだと思います。ただし、Sleep 1 というのは、負荷を軽減してはいません。
Sleep の引数の「1」は、 1/1000 sec ですから、Excelにおいて、そのタイミングをずらすのは、せいぜい、500 程度です。また、DoEvents は、CPUへの割り込みを許します。
その延長上に、APIタイマーがありますが、しかし、そんなに簡単ではなさそうです。
これは、特殊なイベントの種類だと思います。
>このマクロを起動中だと他のエクセルファイルが開けないのです。
>他のファイルをダブルクリックしても、起動中のこのマクロのエクセルが前面にくるだけです。
DoEvents を使う使わないは別として、そのマクロが動いている状態で、他のブックの作業をしようとして割り込みを入れることが出来たら、場合によっては、マクロ自体が、待機するかエラーを出してしまうような気がします。その前に、ワークシートが重くてしょうがないです。それで、バックグラウンド で動くのは、OnTimeメソッドぐらいしかありません。
もうひとつは、どのようにしてデータが送られてくるか、そのデータの入手方法にもよります。データの入ってくる方法が、私の知っている範囲ですと、DDEですが、その入ってきたときに、実際は、マクロ(COM)が働いていることがあります。そうすると、同時にマクロは動きませんので、片方が死んでしまいます。
そのデータの入手方法はどのようなものですか?
RSS などを使っているのではありませんか?
同じような質問は、ここのカテゴリでずいぶんありますが、回答者側が、同じ環境で動かせないので、成功例は少ないようです。
この回答への補足
回答ありがとうございます。
マクロの概要としましては、シリアルポートからのデータ受信を待って、
データが送られてきたらワークシートの表上に受信した値を代入。を繰り返すものです。
Wendy02様とKenKenSP様の説明で、他のブックが開けない理由は大体理解できました。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 2 2023/03/02 18:54
- Excel(エクセル) マクロで謎の現象が起きていて困ってます。 エクセルで作ったボタンを押すとマクロが動いて処理をしてくれ 3 2023/06/22 17:28
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて 重複したものがあれば行を削除するとい 1 2023/02/27 18:49
- Visual Basic(VBA) エクセルVBA 4 2022/05/14 00:51
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 6 2023/03/03 18:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
マクロの連続印刷が突然不可能...
-
Excel_マクロ_現在開いているシ...
-
エクセルで特定の列が0表示の場...
-
ExcelのVBA。public変数の値が...
-
エクセルマクロでワードの一ペ...
-
Excelのセル値に基づいて図形の...
-
Excel マクロ VBA プロシー...
-
ダブルクリックで貼り付けた画...
-
一つのTeratermのマクロで複数...
-
エクセルに張り付けた写真のフ...
-
wordを起動した際に特定のペー...
-
メッセージボックスのOKボタ...
-
EXCEL VBAでApplication.waitを...
-
Excel・Word リサーチ機能を無...
-
#define __T(x) L ## x について
-
エクセルで縦に並んだデータを...
-
#defineの定数を文字列として読...
-
TERA TERMを隠す方法
-
マクロ実行時、ユーザーフォー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
Excel・Word リサーチ機能を無...
-
エクセルで特定の列が0表示の場...
-
Excel_マクロ_現在開いているシ...
-
一つのTeratermのマクロで複数...
-
メッセージボックスのOKボタ...
-
Excel マクロ VBA プロシー...
-
ExcelのVBA。public変数の値が...
-
エクセルで別のセルにあるふり...
-
エクセルに張り付けた写真のフ...
-
Excel マクロでShearePoint先の...
-
TERA TERMを隠す方法
-
Excelのセル値に基づいて図形の...
-
Excel VBAからAccessマクロを実...
-
ExcelVBAでPDFを閉じるソース
-
マクロ実行時、ユーザーフォー...
-
オートフィルターとExcelマクロ...
-
wordを起動した際に特定のペー...
-
特定文字のある行の前に空白行...
-
エクセルで縦に並んだデータを...
おすすめ情報