返回列表 上一主題 發帖

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

本帖最後由 c_c_lai 於 2016-5-2 07:47 編輯

回復 1# ketrddem
提供參考:

ThisWorkbook::
  1. Sub Ex()
  2.     [A1] = 10
  3.     [B1] = 8
  4.     [A1] = 6
  5. End Sub
複製代碼
工作表1:
  1. Private Sub Worksheet_Calculate()
  2.     Dim target As Range
  3.     Set target = Range("C1")

  4.     '  If Not Intersect(target, Range("C1")) Is Nothing Then
  5.     If target.Value = "YES" Then
  6.         '  Run my VBA code
  7.         MsgBox "Worksheet_Calculate is Activvated!"
  8.     End If
  9. End Sub

  10. Private Sub Worksheet_Change(ByVal target As Range)
  11.     '  If Not Intersect(target, Range("C1")) Is Nothing Then
  12.     If target.Address = "$C$1" Then
  13.         '  MyMacro()
  14.         MsgBox "Worksheet_Change = " & target.Address
  15.     End If
  16. End Sub
複製代碼
請用 F8 來 Trace 來仔細觀察  Worksheet_Calculate() 以及
Worksheet_Change(ByVal target As Range) 是如何運作,
目前 {A1:B1] 均是以 Assign value 方式進行,但如果它們都為
公式帶入值可能 Worksheet_Change() 不會有動作,如 [C1]
內容值為: =IF(A1>B1, "YES", "NO")  一樣。
{A1:B1] 你可以帶入 DDE 公式 來觀察資料匯入時之動態狀況。

TOP

本帖最後由 c_c_lai 於 2016-5-2 07:48 編輯

回復 3# ML089
好久沒連繫了, 謝謝指證,疏忽了。
  1. target.Address = "$A$1" : True : Boolean
  2. target.Address = "A1"   : False : Boolean
複製代碼

TOP

回復 5# ML089
不好意思,出去到國稅局報稅,剛從外頭回來。

Step 1:
當 [A1] = 10,  Excel 系統會先觸動
Worksheet_Calculate() 然後接著再觸動
Worksheet_Change(ByVal target As Range)
這時 target 為 [A1];
[C1] 則由公式自動判斷,值為 "YES"
並未再觸發任何 Trigger。

Step 2:
當 [B1] = 8,Excel 系統會先觸動
Worksheet_Calculate() 然後接著再觸動
Worksheet_Change(ByVal target As Range)
這時 target 為 [B1];
[C1] 則由公式自動判斷,值為 "YES"
並未再觸發任何 Trigger。

Step 3:
當 [A1] = 6,  Excel 系統亦會先觸動
Worksheet_Calculate() 然後接著再觸動
Worksheet_Change(ByVal target As Range)
這時 target 為 [A1];
[C1] 則由公式自動判斷,值為 "NO",也
並未再觸發任何 Trigger。

公式值的變化,實際上並不會觸發任何知 Trigger
內在事件 (Event)。
假設 [A1]、[B1] 如為 DDE 匯入之公式,開盤後之
DDE 數據值的任何變動都不會去觸發 Worksheet_Change
至於 針對  [A1]、[B1] 兩欄的數據變動是否會牽動
Worksheet_Calculate() ,實有待實務觀察,
但如另一欄位設定為 =A1、或 =B1,則該欄位之數據異動
會牽動 Worksheet_Calculate() 、以及 Worksheet_Change() 的。

TOP

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

TOP

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

TOP

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

TOP

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

TOP

回復 24# ketrddem

TOP

        靜思自在 : 有多少力量就做多少事,不要心存等待,等待才會落空。
返回列表 上一主題