返回列表 上一主題 發帖

價格紀錄的語法有寫錯嗎??

回復 1# 藍天麗池
改用 Change 試試看!
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Address = "$B$2" Then Call RecordPrice
  3. End Sub
複製代碼

TOP

本帖最後由 c_c_lai 於 2016-3-22 06:53 編輯

回復 6# 藍天麗池
取代你原先 Sheets("RTD") 裡的 Worksheet_Calculate()。
又,你 目前 "模組1" RecordPrice 裡的 For ~ Next 運算式可以
用下列方式取代,以節省處裡時間:
  1.    '  For I = 1 To 3
  2.    '      Cells(WR, I) = Cells(2, I)
  3.    '  Next I
  4.    Cells(WR, 1).Resize(, 3) = [A2:C2].Value
複製代碼

TOP

回復 8# 藍天麗池
先回答你第一個問題:
  1. If (WR = 3) Or _
  2.     (Range("B" & WR - 1) <> Range("B2")) Then ' 總量有異動時才記錄
  3.      For I = 1 To 3
  4.          Cells(WR, I) = Cells(2, I)
  5.      Next
  6. End If
複製代碼
從 For ~ Next 改為下列一次功夫就填入值 (Assign Value) 的方式,
你說是哪個處理較快速?
  1. If (WR = 3) Or _
  2.     (Range("B" & WR - 1) <> Range("B2")) Then ' 總量有異動時才記錄
  3.     Cells(WR, 1).Resize(, 3) = [A2:C2].Value
  4. End If
複製代碼

TOP

本帖最後由 c_c_lai 於 2016-3-22 13:17 編輯

回復 8# 藍天麗池
Sheets  -  shtRTD (RTD)
原本內容:
  1. Option Explicit

  2. Private Sub Worksheet_Calculate()
  3.     Call RecordPrice
  4. End Sub
複製代碼
將它移除掉,修改為:
  1. Option Explicit

  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3.     '  當 B2 欄位有異動時, 則去呼叫 RecordPrice 的方法 (Method)。
  4.     If Target.Address = "$B$2" Then Call RecordPrice
  5. End Sub
複製代碼
假設:
如你欲將原本之 :
  1.   A                  B            C                 D
  2. 時間                總量               
  3. 22:38:54        8734.54        2238        8734.54
複製代碼
更改為從 D 欄開始重新佈局成:
  1.   C                 D             E                 F
  2. 時間                總量               
  3. 22:38:54        8734.54        2238        8734.54
複製代碼
則將上述之 Worksheet_Change 請修正為:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     '  當 D2 欄位有異動時, 則去呼叫 RecordPrice 的方法 (Method)。
  3.     If Target.Address = "$D$2" Then Call RecordPrice
  4. End Sub
複製代碼
另外, Module1 內之 RecordPrice 裡的模組:
  1. Option Explicit

  2. Sub RecordPrice()
  3.     Dim WR As Long

  4.     If Range("D2") < 1 Then Exit Sub

  5.     WR = Range("A1").End(xlDown).Row + 1
  6.     '  ActiveWindow.ScrollRow = WR - 5           '  只顯示最新幾筆資料
  7.     If (WR = 3) Or _
  8.        (Range("B" & WR - 1) <> Range("B2")) Then '  總量有異動時才記錄
  9.         Cells(WR, 1).Resize(, 3) = [A2:C2].Value
  10.     End If
  11. End Sub
複製代碼
更換為:
  1. Option Explicit

  2. Sub RecordPrice()
  3.     Dim WR As Long

  4.     If Range("F2") < 1 Then Exit Sub

  5.     WR = Range("C1").End(xlDown).Row + 1
  6.     '  ActiveWindow.ScrollRow = WR - 5           '  只顯示最新幾筆資料
  7.     If (WR = 3) Or _
  8.        (Range("D" & WR - 1) <> Range("D2")) Then '  總量有異動時才記錄
  9.         Cells(WR, 3).Resize(, 3) = [C2:E2].Value
  10.     End If
  11. End Sub
複製代碼

TOP

回復 12# 藍天麗池
不太明瞭 "如果C2變動就往下紀錄B2-C2,但是其他不紀錄",是甚麼意思?
你的 RecordPrice() 一次便寫入 A:U 啊。何謂 "其他不紀錄" ?

TOP

回復 14# 藍天麗池
是這樣嗎?

TOP

回復 16# 藍天麗池
那[A] 時間豈不被後者敷蓋?

TOP

回復 16# 藍天麗池
Like this?

TOP

回復 20# 藍天麗池
shtRTD(RTD) 工作表單內容:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     '  當 D2 欄位有異動時, 則去呼叫 RecordPrice 的方法 (Method)。
  3.     If Target.Address = "$C$2" Or Target.Address = "$E$2" Or Target.Address = "$G$2" Or Target.Address = "$I$2" Or _
  4.               Target.Address = "$K$2" Or Target.Address = "$M$2" Or Target.Address = "$O$2" Or _
  5.               Target.Address = "$Q$2" Or Target.Address = "$S$2" Or Target.Address = "$U$2" Then
  6.         Call RecordPrice(Target.Address)
  7.     End If
  8. End Sub
複製代碼
Module1 模組內容:
  1. Option Explicit

  2. Sub RecordPrice(TG As String)
  3.     Dim WR As Long

  4.     If Range("A1") < 1 Then Exit Sub
  5.     '  WR = Range("A1").End(xlDown).Row + 1
  6.     WR = Range(TG).End(xlDown).Row + 1      '  修改成以觸發之欄位為判斷基點

  7.     '  ActiveWindow.ScrollRow = WR - 5           '  只顯示最新幾筆資料

  8.     Cells(WR, 1).NumberFormatLocal = "hh:mm:ss"
  9.    
  10.     If WR = 3 Then  '  總量有異動時才記錄
  11.         Cells(WR, 1).Resize(, 21) = [A2:U2].Value
  12.     Else
  13.         Cells(WR, 1) = [A2]
  14.         Range(Left(TG, 3) & WR) = Range(TG)
  15.         Range(Left(TG, 3) & WR).Offset(, -1) = Range(TG).Offset(, -1)
  16.     End If
  17. End Sub
複製代碼

TOP

回復 21# 藍天麗池
標頭第一、二列公式請自行補上 (因我此端無啟動券商軟體,所以無法加入公式會照成Excel檔案  "無法回應")
股票0.rar (18.82 KB)
至於如何處裡日期問題,你再自行先研究看看。

TOP

        靜思自在 : 不要隨心所欲,要隨心教育自己。
返回列表 上一主題