返回列表 上一主題 發帖

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

回復  c_c_lai


    修改之後,第一次變動會全部往下寫,為什麼會這樣??
藍天麗池 發表於 2016-4-9 09:04

你不是第一次 (WR = 3) 就要全部寫入?

TOP

回復 54# 藍天麗池
替換掉
  1.     '  If WR = 3 Then  '  總量有異動時才記錄
  2.     '      Cells(WR, 1).Resize(, 400) = [A2:OJ2].Value
  3.     '  Else
  4.        Range(Left(TG, Len(TG) - 1) & WR) = Range(TG)                            '  可處裡到 AA 以後的欄位
  5.        '  Range(Left(TG, 3) & WR) = Range(TG)                                   '  只能處裡到 A ~ Z
  6.        Range(Left(TG, Len(TG) - 1) & WR).Offset(, -1) = Range(TG).Offset(, -1)  '  可處裡到 AA 以後的欄位
  7.       '  Range(Left(TG, 3) & WR).Offset(, -1) = Range(TG).Offset(, -1)          '  只能處裡到 A ~ Z
  8.     '   End If
複製代碼
可處裡到 AA 以後的欄位,這是已開始動工的前置準備。

TOP

倒數第五列加上
Cells(WR, 1) = [A2]
可能在測試時不小心刪掉了。

TOP

回復 56# 藍天麗池
養成寫程式隨手加上註解說明,人不是神仙
過陣子你就會看不懂你自已以往寫的程式了,
如果都無註釋的話,絕不要偷懶自我要求。

TOP

回復 60# 藍天麗池
股票10:

shtRTD(RTD) 工作表單內容:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     '  當 Target (總量) 欄位有異動時, 則去呼叫 RecordPrice 的方法 (Method)。
  3.    
  4.     If Target.Row = 2 And Target.Column Mod 4 = 0 Then
  5.         Call RecordPrice(Target.Address)
  6.     End If
  7. End Sub
複製代碼
Module1 模組內容:
  1. Sub RecordPrice(TG As String)
  2.     Dim WR As Long
  3.    
  4.     If Range("A1") < 1 Then Exit Sub
  5.     '  ActiveWindow.ScrollRow = WR - 5           '  只顯示最新幾筆資料
  6.    
  7.     WR = Range(Left(TG, Len(TG) - 1) & Rows.Count).End(xlUp).Row + 1       '  求取該異動欄位的最後一筆紀錄列位置
  8.    
  9.     Range(Left(TG, Len(TG) - 1) & WR).Offset(, -3).NumberFormatLocal = "hh:mm:ss"   '  設定儲存格格式 (時間)
  10.    
  11.     Range(Left(TG, Len(TG) - 1) & WR) = Range(TG)                            '  可處裡到 AA 以後的欄位 (總量)
  12.     Range(Left(TG, Len(TG) - 1) & WR).Offset(, -1) = Range(TG).Offset(, -1)  '  可處裡到 AA 以後的欄位 (成交)
  13.     Range(Left(TG, Len(TG) - 1) & WR).Offset(, -3) = Range(TG).Offset(, -3)  '  寫入異價時間 (時間)
  14. End Sub

  15. Sub 時間()
  16.     Dim i As Integer
  17.    
  18.     For i = 1 To 400 Step 4
  19.         Cells(2, i) = WorksheetFunction.Text(Now(), "hh:mm:ss")
  20.     Next i
  21.    
  22.     Application.OnTime Now() + TimeValue("00:00:01"), "時間"
  23. End Sub

  24. Sub Cls()
  25.     Range("A3:OK5000").ClearContents
  26.     Range("A3").Select
  27. End Sub
複製代碼

TOP

回復 60# 藍天麗池
股票10.rar (22.15 KB)

TOP

回復 60# 藍天麗池
我覺得當 WR 等於 3 時,應加入判斷,否則在後續處裡會有瑕玼:
  1.     If WR = 3 Or Range(Left(TG, Len(TG) - 1) & WR - 1) <> Range(TG) Then
  2.         Range(Left(TG, Len(TG) - 1) & WR).Offset(, -3).NumberFormatLocal = "hh:mm:ss"   '  設定儲存格格式 (時間)
  3.         
  4.         Range(Left(TG, Len(TG) - 1) & WR) = Range(TG)                            '  可處裡到 AA 以後的欄位 (總量)
  5.         Range(Left(TG, Len(TG) - 1) & WR).Offset(, -1) = Range(TG).Offset(, -1)  '  可處裡到 AA 以後的欄位 (成交)
  6.         Range(Left(TG, Len(TG) - 1) & WR).Offset(, -3) = Range(TG).Offset(, -3)  '  寫入異價時間 (時間)
  7.     End If
複製代碼

TOP

回復 68# GBKEE
我從未使用過 Private Sub Worksheet_Calculate()
它是怎麼運作?
DDE 匯入值變動時不會觸發 Worksheet_Change 嗎?
我是沒實際觀測過,因為平常我也不太使用它。之前
我比較偏向應用軟體分析與運作方面,謝謝您告知!

TOP

回復 68# GBKEE
假設 DDE 的匯入值異動不會觸發 _Change() 的話:
為了要解決此案例,我會增加第三列作為觸動列,
即第三列每欄內容為 A3 (=A2), B3 (=B2), C3 (=C2),. . . . .
如此便能觸發事件了。
寫入之資料則改從第四列開始判斷寫入。

TOP

回復 71# GBKEE
如果只用 Worksheet_Calculate() 的話,
那要如何判斷是哪個欄位觸發呢?
譬如需判斷  B1 、D1、F1、H1、J1 等欄位之
內容值有否異動,如此才能針對該欄位做相對應之處理?
謝謝!

TOP

        靜思自在 : 願要大、志要堅、氣要柔、心要細。
返回列表 上一主題