3

リアルタイムの市場データへの dde ​​リンクを含む Excel シートがあります。私はタイマーを使って 1 秒ごとに dde ​​の価格を監視しています。その後、一定の条件が満たされたときに注文を送信します。途中で DoEvent を使用して無限ループを試しました。これは 5 秒間機能し、その後ワークブックをフリーズします。

dde 更新の変更に対応する方法はありますか? 変更イベントはそれらを検出しません。ユーザーが手動で変更したことを検出するだけです。

条件付き書式を使用している場合、そのイベントを取得する方法があると言われました。したがって、条件が満たされたときに真になるセル式を作成し、真のときにそのセルを何らかの書式に条件付きで書式設定してから、書式変更イベントを取得できます。それは可能ですか?もしそうならどのように。任意の提案をいただければ幸いです。

明確にするために:株式を取引するための注文を送信するイベントをVBAで取得したいと考えています。私が今これを行っている方法は、トリガー列で真のセルを探してすべての行をループするタイマーを使用することです。見つかったら、その行のフラグをオフにし (true 条件を false に設定)、注文を送信します。

問題は、動きの速い株式にとって 1 秒が永遠に続くことです。そのため、トリガー列のセルが true になったときに VBA でイベントをスローする必要があるため、タイマー クラスの 2 番目の間隔を待たずにすぐに応答できます。

私の知る限り、1 秒未満の値でタイマーを呼び出すことはできません。ミリ秒を使用できれば、問題は解決します。10 ミリ秒ごとにリストをループするだけです。

私の知る限り、VBA で別のスレッドを作成することはできません。可能であれば、無限ループを作成し、10 ミリ秒程度の反復ごとにスリープ状態にします。

私の知る限り、MSDN はサポートされなくなったと言っているので、dde を VBA や .net に直接取り込むことはできません。

これが明確になることを願っています。すべての提案をいただければ幸いです。

4

3 に答える 3

1

Worksheet_CalculateDDE 出力セルをパラメーターとして持つダミー関数を作成すると、イベントに応答できるはずですか?

これでうまくいくと思いますが、私は DDE の経験がありません。DDE の更新によって、Calculate イベントが直接トリガーされることさえあります。

于 2012-07-26T07:05:00.370 に答える
0

そのセルにある条件付き書式設定ロジックを別のセルに再作成してみませんか?

たとえば、条件付き書式設定ロジックは、特定の数値を超えたときにセルを強調表示する場合があります。そのロジックを別のセルに配置するだけです。=if(A1>100,TRUE,FALSE)

だから私は私の質問だと思います-イベント自体を拾うことができるのに、なぜフォーマット変更イベントを拾うのですか?

明確にするために編集します。

VBA で連続してマクロを実行したい場合、タイマーは必要ありません。次のように連続ループを実行できます。

Sub macro1()

    Dim i As Double

    With Sheet1

        Do

            '.Cells(5, 4).Value = i

            i = i + 1

            .Cells(1, 1).Value = i

            ' you are going to want to comment this out if you want to don't need to do other things
            DoEvents

            If Sheets("Sheet1").Range("A2").Value = True Then
                ' put your code here.
            End If
        Loop

    End With
End Sub

ですから、私はまだあなたの状況を理解するのに苦労しているに違いありません。

于 2012-07-25T19:32:20.183 に答える
0

条件付き書式を使用してイベントをトリガーできるかどうかを尋ねている場合は、可能です。ただし、私自身は DDE モデルに詳しくありません。Stepan1010 が指摘しているように、条件付き書式を組み合わせてデータ条件からイベントをトリガーすることは、余分な手順のように思えます。

問題は DDE 接続からセルに加えられたセル値ベースの変更を中心にしているため、このリンクの Mr Excel での議論を検討することをお勧めします: http://www.mrexcel.com/forum/showthread.php?176508 -コメント-VBA-アンプ-最小-最大

アプリケーションに適用される場合は、マクロを実際に実装する期間に基づいて、一定期間ループを設定した DoEvent の使用を検討することもできます。この SO 記事はステータス バーに焦点を当てていますが、ループ内の条件に基づいて、イベントの実行に関して同じロジックが適用されると思います: Excel VBA で画面の更新を強制する

うまくいけば、これはあなたに役立つ=)

~JOL

于 2012-07-25T20:09:34.483 に答える