返回列表 上一主題 發帖

關於資料比對的寫法

回復 18# 藍天麗池
目前我的電腦環境裡無安裝卷商軟體,所以無從測試。
我再整理一個適合你的程式吧!
其實你也可以向 GBKEE、准提部林 等版大,以及站上
許多前輩請益的。他們亦均是我的指導老師。

TOP

本帖最後由 c_c_lai 於 2016-7-20 11:49 編輯

回復 20# 藍天麗池
再試一次
資料暫存A.rar (70.54 KB)

TOP

本帖最後由 c_c_lai 於 2016-7-21 07:10 編輯

回復 20# 藍天麗池
  1. Private Sub Workbook_Open()
  2.     Dim rng As Variant
  3.    
  4.     With Sheets(1)
  5.         For Each rng In Range(.[D2], .[D2].End(xlDown))
  6.             rng.Offset(, 26) = IIf(IsNumeric(rng), rng, 0)
  7.             rng.Offset(, 1) = IIf(IsNumeric(rng.Offset(, -1)), rng.Offset(, -1), 0)
  8.         Next

  9.         If Time < TimeValue("08:45") Then                   '  早於開盤時間
  10.             Application.OnTime TimeValue("08:45"), "ThisWorkbook.MyWay"  '  設定於08:45 執行 MyWay 程序
  11.         ElseIf Time >= TimeValue("08:45") And Time <= TimeValue("13:30") Then '  於交易時間內
  12.             MyWay                                           '  執行 MyWay 程序
  13.         End If
  14.     End With
  15. End Sub

  16. Sub MyWay()
  17.     With Sheets(1)
  18.         For Each rng In Range(.[D2], .[D2].End(xlDown))
  19.             If IsNumeric(rng) Then
  20.                 If rng.Offset(, 26).Value <> rng.Value Then
  21.                     rng.Offset(, 26) = rng
  22.                     rng.Offset(, 2) = rng.Offset(, 1)
  23.                     rng.Offset(, 1) = IIf(IsNumeric(rng.Offset(, -1)), rng.Offset(, -1), 0)
  24.                 End If
  25.             End If
  26.         Next
  27.     End With
  28.    
  29.     Application.OnTime Now + TimeValue("00:00:10"), "ThisWorkbook.MyWay"  '  設定 10 秒後 執行 MyWay 程序
  30. End Sub

  31. Sub addN()         '  手動測試用
  32.     Dim rng As Range
  33.    
  34.     With Sheets(1)
  35.         For Each rng In Range(.[AD2], .[AD2].End(xlDown))
  36.             rng = rng + 1
  37.         Next
  38.     End With
  39. End Sub
複製代碼

TOP

本帖最後由 c_c_lai 於 2016-7-21 06:34 編輯

回復 25# 藍天麗池
第一次執行完之後,每10秒會再去執行一次。
順便將
  1. Application.OnTime TimeValue("08:45"), "MyWay"
複製代碼
改成
  1. Application.OnTime TimeValue("08:45"), "ThisWorkbook.MyWay"
複製代碼
以防尋找不著。只標明 "MyWay" ,一般系統會直接去模組裡搜尋。

TOP

回復 27# 藍天麗池
"00:00:10" 那你就不會變動性的依你的需修改?
譬如:兩秒跑一次 "00:00:02"、五秒跑一次 "00:00:05"

TOP

回復 29# 藍天麗池
全部都一起寫入,因為無法使用 Worksheet_Change()
無從判斷是由哪個欄位修正觸發的緣故。

TOP

回復 31# 藍天麗池
明天早上你用這支程式試試看。
資料暫存A.rar (81.92 KB)

TOP

回復 31# 藍天麗池
  1. ThisWorkbook:
  2. Private Sub Workbook_Open()
  3.     Dim rng As Variant, rnt As Range
  4.    
  5.     With Sheets(1)
  6.         Set rnt = [AD2]
  7.         For Each rng In Range(.[D2], .[D2].End(xlDown))
  8.             rng.Offset(, 1) = IIf(IsNumeric(rng.Offset(, -1)), rng.Offset(, -1), 0)
  9.             rnt.FormulaR1C1 = "=RC[-26]"
  10.             Set rnt = rnt.Offset(1)
  11.         Next
  12.     End With
  13. End Sub
複製代碼
  1. 工作表1:
  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3.     With Sheets(1)
  4.         If Left(Target.Address, 3) = "$AD" And IsNumeric(Target) Then
  5.             .Cells(Target.Row, 6) = .Cells(Target.Row, 5)
  6.             '  Debug.Print "Target.Address = " & Target.Address
  7.         ElseIf Left(Target.Address, 2) = "$F" Then
  8.             .Cells(Target.Row, 5) = IIf(IsNumeric(.Cells(Target.Row, 3)), .Cells(Target.Row, 3), 0)
  9.         Else
  10.             
  11.         End If
  12.     End With
  13. End Sub

  14. Private Sub Worksheet_Calculate()
  15.     '  [K1] = [K1] + 1
  16. End Sub
複製代碼

TOP

回復 36# 藍天麗池
我是想印證 Worksheet_Change() 與DDE 間之微妙牽動,
如透過它欄 ( AD3 "= D3" ) 的對等關係想印證是否能觸發
而已。端結是提問人有否頓悟決心、及好奇求知心。

TOP

回復 39# 藍天麗池
再試試,觀察新增的 "CD 欄觸發"、"AD 欄動態"、"F 欄動態"
數字有否變化?
資料暫存A.rar (83.11 KB)

TOP

        靜思自在 : 時時好心就是時時好日。
返回列表 上一主題