返回列表 上一主題 發帖

[發問] Calculate,能否回傳發生變動的儲存格的欄位

回復 16# c_c_lai


我有想過,陣列比對。

每十秒或二十秒比對一次。

假設
10:00分0秒,儲存內容為陣列1
10:00分10秒,儲存內容為陣列2

陣列1與陣列2比對,找出差異欄位,定位出股號及條件原因
然後把資訊寫進別的儲存格
寫進後,陣列1刪除,陣列2變更為陣列1,等著下個十秒再做陣列2的比對
但有想法卻不知是否真正可行,寫了不知對系統會不會造成很大負擔。
更重要的是,小弟對陣列不太熟。就算陣列寫出來,也不知如何做比對定位。
EXCEL VBA新手,請前輩多多指教

TOP

小弟不才,只有想法,整個EXCEL還沒真的寫完整。
所以提供圖例,希望各位能提供些想法供小弟參考。

123.jpg (206.94 KB)

圖例

123.jpg

EXCEL VBA新手,請前輩多多指教

TOP

回復 15# ketrddem
RTD 不需先開啟券商軟體,它會自動連結,
這種 COM 的機制比較好用。以前也使用元大。
我曾經也使用過 Workbook_Calculate()
但是究竟是哪個欄位在觸發,欄位位址為何,
很難掌握,你可有好的 Idea ?

TOP

回復 13# c_c_lai


    元大RTD,沒有使用DDE。

DDE太不方便了,還是RTD比較好用
EXCEL VBA新手,請前輩多多指教

TOP

〔觸動〕與〔變動〕應是兩回事!
〔觸動〕後,不一定公式值有〔變動〕,
若儲存格之間又有關聯參照,也許〔連動〕也會發生,
沒有檔案,這樣猜不是辦法!!!

TOP

回復 11# ketrddem
你使用哪一家券商軟體?

TOP

回復 6# c_c_lai

謝謝你詳細的解說,終於懂了。
其實 Private Sub Worksheet_Calculate()並未傳入參數,我將  If Target.Value = "YES" 中的 Target 誤認為是傳入參數值,才以為是 C3公式觸動Worksheet_Calculate。
後來仔細觀察 Private Sub Worksheet_Change(ByVal Target As Range) 中的 If Target.Value = "YES" Then 根本不會執行到,因 Target 僅有A1、B1,C3是公式沒有觸發是我自己觀察不夠,你真是 用心良苦。


Private Sub Worksheet_Calculate()
    Dim Target As Range
    Set Target = Range("C1")

    '  If Not Intersect(target, Range("C1")) Is Nothing Then
    If Target.Value = "YES" Then
        '  Run my VBA code
        MsgBox "Worksheet_Calculate is Activvated!"
    End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    '  If Not Intersect(target, Range("C1")) Is Nothing Then
    If Target.Address = "$C$1" Then
        '  MyMacro()
        MsgBox "Worksheet_Change = " & Target.Address
    End If
End Sub
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

因為整張表都是公式,change事件應該是不會被觸動的
所以才直接想到用calculate
EXCEL VBA新手,請前輩多多指教

TOP

回復 8# ketrddem
你可以將檔案壓縮成 .rar 壓縮檔便能上傳了,
選用高級模式內的檔案上傳 (迴紋針)。

TOP

回復 7# ketrddem
你實際跑一下程式,看它到底實際會觸動那些事件,便知。
如果是觸動 _Change 即可迅速得知觸動欄位的位址。如僅僅
只觸動 _Calculate 那就頭大了!

TOP

        靜思自在 : 對父母要知恩,感恩、報恩。
返回列表 上一主題