No.3ベストアンサー
- 回答日時:
こんにちは。
Wendy02です。返事が遅くなりました。あれから、折に触れて考えてみました。
以下のサイトにある方法が出来るのではないか、と思いました。(ドイツ語ですから、マクロだけをみてください)
http://www.herber.de/forum/archiv/24to28/t24099. …
Auto_Open で、Activeなシートを、OnData で監視させます。(お分かりだと思いますが、全部、標準モジュールにおきます)そこに、DDEのデータが入ってくると、その設定された、マクロが動くという仕掛けです。(まだ、このメソッドは生きていると思います)
ActiveSheet.OnData = "Update"
一応、OnDataのHelpを置いておきます。
# 機能 Ver5 マクロヘルプより
DDE または OLE でリンクされたデータが、Microsoft Excel に届いたときに実行されるプロシージャの名前を返します。ここで設定したプロシージャが実行されるのは、他のアプリケーションからデータが届いたときだけです。値の取得および設定ともに可能です。
Wendy様、こんばんは
初めに、時間を割いての検討に心から感謝します。
この度ご指摘いただきました”OnData"メッソドですが、見事にマッチいたしました。
隠しメッソドとしてこんなものがあるなんて、まったくわかりませんでした。
これで先に進むことができます。本当にありがとうございました。
また何かの機会にお会いできるのを、楽しみにしています。
No.2
- 回答日時:
こんにちは。
Wendy02です。>DDEは他のjavaアプリケーションから、データを取り込んでいます。
そういう方法もあるのですね。知りませんでした。
Javaからなら、OLEもできるような気がしますが・・・。
以前の方の話を聞くと、DDEで、そんなに速度低下はしない、といわれたのですが、実際に見たわけではないので、はっきりと言えないです。(私が試したのは、旧式の方法でExcelで実現しただけなので、話にならないほど遅かったです)
>上記ご指摘いただいたマクロの5秒を1秒ごとにすれば、問題解決なのです。
>処理速度の低下により○秒ごとにマクロを実行するということが崩れてしまったりはしないでしょうか。
かなり厳しいですね。OnTime メソッド自体では、それほどのロスは発生しませんが、DDE自体のタイムロスは存在しませんか?また、マクロは、スクリプト言語ですから、やはり遅いです。ただ、それは、そのデータの捕まえ方(イベント)にもよるような気がします。
Excelのワークシート上は、だいたい、どんなに遅くても、100ms 程度と見てよいと思いますが、もう一度、振り出しに戻ってみても良いような気がします。
>想定される範囲でご回答いただけましたら幸いです。
出来る限りのことはさせていただきます。それは、この話は、私自身では、もう2年以上、うまくいかない質問として残っているからです。もしも、この人はダメだなって思ったら、すぐにダメダシしていただいてもよいです。
<私の現在の計画>
・そのまま1秒ごとでロスを計る(ロスの計り方はあります)
・Win32 API関数を使用する
・Worksheet_Calculate イベントとNow()関数による連携(解決には至っていない)
・Java の出力を直接、DDE関数で取る(仕様書が必要かもしれません)
(ことごとく失敗する可能性もあります)
この後は、まだ、勉強が足りませんが、VB6 で別途ツールを作成する、というところがあります。そのために、本を購入したのですが、まだ、ちゃんと読んでいません。
今、ちょっと忙しいので、一つずつ、私の考えを展開したいと思っております。至らないとは思いますが、こちらこそ、よろしくお願いします。
多忙な中での回答、本当に感謝いたします。
まさかこうも親切に解説していただけるとは思っておりませんでした。
私はプログラミングは実にCOBOL以来ですので、ご提示いただいた内容をすぐに理解できず、ご迷惑をおかけするかもしれませんが一生懸命理解に勤めますので、よろしくお願い致します。
私の質問の仕方にも問題があるかもしれませんので、その点何かございましたらご指摘いただきたく存じ上げます。
No.1
- 回答日時:
こんばんは。
それは、何かの測定器ですか?逆に、もしよろしかったら、どんな機械で、どんな風に設定するとか教えていただきたいと思っております。この種の回答は、まだ、実験が出来ないので、これで、4回目になりますが、まだ、想像の範囲なんです。(すみません、勝手なことを言って)
DDE は、DDE関数はあり、やり方は分かるのですが、実際の試すための道具がないということで、やったことがありません。
>イベントプロシージャの(worksheet_change)で試してみたのですが、
やっぱりそうなんですね。前回の質問の時には、ここら辺りが曖昧になってしまいました。
手前勝手な話はここまでにして、私の知る範囲では、OnTime メソッドを使用します。
TimerStart で、マクロを動かします。以下は、A1 にデータが入ってくるものとして、5秒ごとにチェックし、A1 のデータが変更あったら、2列目に、その変更のデータを書き写すというマクロです。付録として、解除用のマクロがついています。ただし、別のマクロが動いている場合は、たぶん、出来ないと思います。
'-------------------------------------------
'標準モジュールが最適
Private myOnTime As Date 'OnTime 用の時間データ
Private BackData As Variant '前回のセルのデータ
Sub TimerStart()
'タイマー
'ここにチェックマクロを置く
If BackData = Empty Then
BackData = Cells(1, 1).Value
Cells(65536, 2).End(xlUp).Offset(1).Value = Cells(1, 1).Value
ElseIf BackData <> Cells(1, 1).Value Then
Cells(65536, 2).End(xlUp).Offset(1).Value = Cells(1, 1).Value
BackData = Cells(1, 1).Value
End If
'次のチェック時間 (以下は5秒後)
myOnTime = Now() + TimeValue("00:00:05")
Application.OnTime myOnTime, "TimerStart"
End Sub
Sub TimerStop()
'タイマー停止
On Error Resume Next
Application.OnTime myOnTime, "TimerStart", , False
On Error GoTo 0
If Err.Number > 0 Then
MsgBox "設定が残っていません。"
Else
MsgBox "設定が解除されました。"
End If
End Sub
早々のご回答ありがとうございました。
DDEは他のjavaアプリケーションから、データを取り込んでいます。
その取り込んでいるデータが”A1"だったとして、データのの更新頻度はランダムであり、例えば1秒ごとであったり、5秒間更新がなかったりします。
上記ご指摘いただいたマクロの5秒を1秒ごとにすれば、問題解決なのです。
が、同時にいくつかのマクロを走らせるような使用になると想定しているため、処理速度の低下により○秒ごとにマクロを実行するということが崩れてしまったりはしないでしょうか。
この点は自分で試してみれば良いのでしょうが、まだその段階まで作業が進んでおらず、想定される範囲でご回答いただけましたら幸いです。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- Excel(エクセル) 同じExcelのBOOK内で 1枚目のシートのA1のセルにデータを 入れると2枚目のシートのC1のセ 1 2022/10/25 09:40
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/26 13:19
- Excel(エクセル) Excelについて教えてください。 帳票データがあります。 アクセスに取り込むため、 データ形式にし 1 2022/06/08 19:59
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別シートのマクロを実行する方法
-
エクセルのマクロボタンが編集...
-
Access終了時にマクロまたはVBA...
-
Application.Runエラー(1004)
-
エクセルVBAで数式バー再表示後...
-
アクセスのマクロについて
-
マクロ 戻るボタンを押したらシ...
-
シート保護を掛けたまま並べ替...
-
アクセス:検索フォームボタンに...
-
マクロとモジュールの違いを教...
-
private sub にしたらマクロが...
-
access2010 コマンドまたはアク...
-
エクセルのマクロ
-
オートシェイプの黄色いハンド...
-
「Access」のフォームを...
-
エクセルVBAで、ボタンの文字を...
-
RunMacroメソッドではsubプロシ...
-
ExcelのVBAでDisplayalertsで警...
-
マクロの自動記録機能について
-
エクセル VBA マクロボタンが?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別シートのマクロを実行する方法
-
エクセルのマクロボタンが編集...
-
Application.Runエラー(1004)
-
Access終了時にマクロまたはVBA...
-
エクセルVBAで、ボタンの文字を...
-
シート保護を掛けたまま並べ替...
-
InputBox内の表示について
-
マクロ 戻るボタンを押したらシ...
-
access2010 コマンドまたはアク...
-
今日の日付の範囲を指定して印...
-
AccessでExcelファイルを印刷
-
マクロが登録できません
-
マクロとモジュールの違いを教...
-
エクセル VBA SendKeys ループ...
-
Workbook_Openを起動時以外に呼...
-
プロシージャが大きすぎます!
-
ExcelVBAで右クリックメニュー...
-
ExcelのVBAでDisplayalertsで警...
-
ACCESS エラーメッセージ表示...
-
特定のシートだけ印刷はマクロ...
おすすめ情報