質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

35666閲覧

VBA実行中に他のexcelファイルを操作する

minato_hy

総合スコア68

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/10/15 05:55

###前提・実現したいこと
とある温度計測器のAPIとVBAを使い、Excelファイルに計測器から取得した温度をペーストしていくようにしています。
温度を1秒ごとに記録していきたいので、Do-whileループの中で、温度を取得しては1秒待機する、という処理をしています。

###発生している問題・エラーメッセージ
下記のVBAコードでは、1秒ごとにしかマウス入力を受け付けず、温度を記録中に他のexcelファイルを操作することもできません。また、excelのシークバーやexcelファイルのウインドウを動かしていると、その間は温度の貼り付けが中断されてしまいます。
なにかよい方法はないでしょうか?

###該当のソースコード

VBA

1Sub PasteTemp() 2 stopFlag=False 3 Do 4 DoEvents 5 <現在の温度を取得する処理> 6 <取得した温度をシートに貼り付ける処理> 7 Application.Wait [Now()+"00:00:01"] '現在時刻より1秒間待機 8 Loop While stopFlag=False '下のプロシージャの中止ボタンが押されるまで温度を記録し続ける 9End Sub 10 11Sub StopPasteButton() 'ボタンを押すと温度の記録を注視 12 stopFlag=True 13End Sub

###補足情報(言語/FW/ツール等のバージョンなど)
Windows7
Excel 2007

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ループの待ち時間をもっと短くして DoEvents 間隔を少なくすればある程度は対応できますが、
VBAはマルチスレッドには対応していないので、
ユーザーが操作していたり、他の処理が走ったりすると止まりますね。
エクセルのVBAだけでユーザー操作を許しつつ、確実に1秒間隔にするのは難しいと思います。

専用のアプリでデータベースに書き込んで、それをエクセルのVBAから読み込むというようにするぐらいしかないと思います。

投稿2016/10/15 07:59

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

minato_hy

2016/10/15 09:40

なるほど、VBA勉強し始めでまだ方法を知らないだけだと期待していたのですが、非マルチスレッドだったのですね……VBA単体での処理は諦めがつきそうです、ありがとうございます
guest

0

サンプリングしてCSV形式などのファイルに落とすプログラムを、C++やC#またはJavaなどで作成して別アプリで動作させておき、EXCELでは、ファイルの更新を見てデータを読み出すように、処理を分けるかですね。
他の方も書いてますが、VBAでマルチスレッドを行うのはまず無理なので、サンプリング部分でスレッドを起こせるような言語で記述して処理を分けるのが一番いいかと思います。
ファイルに落とす場合は、ファイルのシェアや排他処理が必要になるかもしれません。

投稿2016/10/17 09:20

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

通常、1つのExcelブックを開いている状態で他のブックを開くと、同じエクセル上の2つ目のブックとして開くことになります。

ですが、マクロ処理を行うブックとは関係なく、裏作業で別のブックを操作したい、ということでよければ、
①1つ目のExcelブックを開く
②スタートメニューから新たにExcelを起動する
③②で起動したExcel上で他のブックを開く

上記のような方法で起動すると、②の時点で1つ目のExcelとは別の、2つ目のExcelとして起動します。
この2つ目のExcel上で別ブックを開くことで、1つ目のExcelのマクロ処理に影響せずに他のブックを操作することができると思います。
(Windows7/Excel2010にて動作確認)

別Excelで起動することにはメリットもありますが、Excel同士の連携という点ではデメリットあるため今回の目的に沿っているかはわかりません。
ひとつの方法として試す価値はあると思いますので、確認して使えるかどうか判断してみてください。

投稿2016/10/17 00:42

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問