2012-07-25 51 views
3

我有一個Excel表格,可以鏈接到實時市場數據。我使用計時器每秒鐘觀看dde價格。然後在滿足特定條件時提交訂單。我嘗試了中間的DoEvent無限循環,它工作5秒鐘,然後凍結工作簿。有沒有辦法在Excel中響應條件格式的變化?

有沒有方法可以響應dde更新中的更改?更改事件不會檢測到它們。它只是檢測用戶何時進行手動更改。

我被告知,如果我有條件格式有一種方法來獲取該事件。因此,我可以創建一個單元格公式,以便在符合條件時變爲true,然後將該單元格格式化爲條件格式,然後選取格式更改事件。那可能嗎?如果是這樣的話。任何建議,將不勝感激。

澄清:我想選擇一個事件在VBA中提交交易股票的訂單。我現在這樣做的方式是使用一個計時器,它循環遍歷所有行,在觸發器列中尋找真正的單元格。一旦發現它將關閉該行的標誌(將真實條件設置爲false)並提交訂單。

問題是,一秒鐘是快速移動股票的永恆。所以我需要在觸發器列中的單元格變爲真時在VBA中引發事件,以便我可以立即響應,而不是等待定時器類的第二個時間間隔。

據我所知,你不能以小於1秒的時間調用計時器。如果我可以使用毫秒,我的問題將得到解決。我只是每10毫秒循環一次列表。

據我所知,我不能在VBA中創建另一個線程。如果我可以做一個無限循環,並在每次迭代後將其置於睡眠狀態10毫秒左右。

據我所知,我無法直接將dde拖入VBA或甚至.net,因爲MSDN稱它不再受支持。

我希望這個澄清。所有的建議表示讚賞。

+0

如果您創建了一個虛擬函數,並將DDE輸出單元作爲參數,那麼您應該能夠響應'Worksheet_Calculate'事件?我猜這可能會奏效,但我沒有使用DDE的經驗。 – 2012-07-25 18:27:02

+0

@Tim什麼時候Worksheet_Calculate激發? – bkarj 2012-07-25 21:06:21

+2

工作表計算時。我不知道DDE更改是否直接觸發計算 - 如果不是,則使用虛擬公式觸發事件(它會將DDE單元作爲輸入,這些單元中的更改應該會觸發重新計算) – 2012-07-25 22:34:00

回答

1

如果您創建了一個虛擬函數,並將DDE輸出單元格作爲參數,那麼您應該能夠響應Worksheet_Calculate事件?

我猜這可能會奏效,但我沒有使用DDE的經驗:DDE更新甚至可能直接觸發Calculate事件。

+0

因此,總之,不需要使用條件合成。 Worksheet_Calculate響應dde更改。 – bkarj 2012-07-26 13:47:47

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 

所以我仍然無法理解你的情況。

+0

我將如何捕獲VBA中的其他單元格更改? – bkarj 2012-07-25 20:18:11

+0

這是基本的vba:如果表格(「Sheet1」)。Range(「A1」)。Value = False Then '在這裏輸出你的代碼End If – Stepan1010 2012-07-25 20:27:51

+0

那不是我想要做的。閱讀我上面的說明。 – bkarj 2012-07-25 20:43:15

0

如果你問你是否可以使用條件格式來觸發一個事件,是的,這是可能的。然而,我自己對DDE模型並不熟悉,並且混合條件格式來從數據條件觸發事件看起來像是一個額外的步驟,正如Stepan1010所指出的那樣。

你可能要考慮在Excel先生的討論在這個環節,因爲這個問題主要圍繞改變從DDE連接到細胞培養而成的基於單元格值更改:http://www.mrexcel.com/forum/showthread.php?176508-Comments-VBA-amp-Min-Max

您也可以考慮使用具有DoEvent根據您實際實現宏的時間長短設置一個循環,如果這適用於您的應用程序。該SO文章聚焦在狀態欄上,但我認爲同樣的邏輯也適用於事件執行的條款,亦即基於一個循環內的條件:Force a screen update in Excel VBA

希望這對您有所幫助=)

〜JOL

相關問題