返回列表 上一主題 發帖

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

本帖最後由 c_c_lai 於 2016-4-10 16:24 編輯

回復 98# 藍天麗池
股票10A.rar (22.07 KB)
股票10B.rar (23.52 KB)
  1. Sub RecordPrice(TG As Range)
  2.     Dim WR As Long, cts As Long
  3.    
  4.     With Sheets("RTD")
  5.         If .Range("A1") < 1 Then Exit Sub
  6.    
  7.         cts = TG.Column
  8.    
  9.         WR = .Cells(Rows.Count, cts).End(xlUp).Row + 1         '  求取該異動欄位的最後一筆紀錄列位置
  10.         
  11.         If WR = 3 Or .Cells(WR - 1, cts) <> .Cells(2, cts) Then
  12.             .Cells(WR, cts).Offset(, -3).NumberFormatLocal = "hh:mm:ss"   '  設定儲存格格式 (時間)
  13.             
  14.             '  修正為只寫入 『券商名』、『成交』、『總量』,「時間」則不予同步帶入
  15.             '  .Cells(WR, cts).Offset(, -2).Resize(, 3) = .Range(TG.Address).Offset(, -2).Resize(, 3).Value
  16.             .Cells(WR, cts).Offset(, -2).Resize(, 4) = .Range(TG.Address).Offset(, -2).Resize(, 4).Value
  17.         End If
  18.     End With
  19. End Sub
複製代碼
  1. Private Sub Worksheet_Calculate()
  2.     Dim Rng As Range, E As Variant
  3.    
  4.     '  Sheets("RTD") 工作表上任何有公式儲存格值有變動,啟動 Sheets("RTD") 的 Worksheet_Calculate 事件
  5.     On Error Resume Next                     '  檔案開啟時 DEE傳回錯誤值
  6.     Set Rng = UsedRange.Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
  7.    
  8.     If Not Rng Is Nothing Then Exit Sub
  9.     On Error GoTo 0                          '  開盤不再處理程式碼的錯誤
  10.             
  11.     For Each E In Me.Names
  12.         If E.Name Like "*TotalVolume*" Then   '  總量的名稱
  13.             If Range(E.Name) > 0 Then         '  總量 > 0
  14.                 With Cells(Rows.Count, Range(E.Name).Column).End(xlUp)
  15.                     '  總量名稱所在的最底列往上到有資料的儲存格
  16.                     If .Row = 2 Or .Row > 2 And .Value <> Range(E.Name).Value Then    '  (各股總量有變動)
  17.                         '  修正為只寫入 『券商名』、『成交』、『總量』,「時間」則不予同步帶入
  18.                         '  .Offset(1).Cells(1, -1).Resize(, 3) = Range(E.Name).Cells(, -1).Resize(, 3).Value
  19.                         .Offset(1).Cells(1, -1).Resize(, 4) = Range(E.Name).Cells(, -1).Resize(, 4).Value
  20.                     End If
  21.                 End With
  22.             End If
  23.         End If
  24.     Next
  25. End Sub
複製代碼
包含「時間」了。

TOP

回復 99# c_c_lai

C大我已經改好了,這兩天讓你們費心了,十分感謝
明天測試後向兩位大大報告測試結果

TOP

本帖最後由 c_c_lai 於 2016-4-11 08:00 編輯

回復 102# 藍天麗池
「時間」位置點更改,請自行加點料。
「股票10A.xlsm」 裡的 RecordPrice()
  1.             '  .Cells(WR, cts).Offset(, -3).NumberFormatLocal = "hh:mm:ss"   '  設定儲存格格式 (時間)
  2.             .Cells(WR, cts).Offset(, 1).NumberFormatLocal = "hh:mm:ss"   '  設定儲存格格式 (時間)
複製代碼
以及 「股票10B.xlsm」 裡的 Worksheet_Calculate()
原本
  1.                         .Offset(1).Cells(1, -1).Resize(, 4) = Range(E.Name).Cells(, -1).Resize(, 4).Value
複製代碼
的上一行增加加上
  1.                         .Offset(1, 1).NumberFormatLocal = "hh:mm:ss"          '  設定儲存格格式 (時間)                  
  2.                         .Offset(1).Cells(1, -1).Resize(, 4) = Range(E.Name).Cells(, -1).Resize(, 4).Value
複製代碼

TOP

回復 103# c_c_lai

好的,感謝C大

TOP

回復 103# c_c_lai

股票.rar (25.01 KB)

C大,測試後,G大的可以正常執行,你的完全沒有動作

TOP

回復 85# GBKEE
G大跟你報告一下,測試後目前正常執行,如有問題我會再向您報告

TOP

回復 105# 藍天麗池
回復 85# GBKEE
由此可知 「DDE 資料匯入」是無法同時觸發 Worksheet_Change 的,
Worksheet_Change 只能對應一般正常性的欄位操作異動觸發;
這便是我為何要同時整理出 『股票10A.xlsm』、 『股票10B.xlsm』
兩種不同應用選擇的道理,以實際的 DDE 測試來驗定是要選擇以
何種內在函式來做正確的選擇工具。 所以實務證明『DDE 資料匯入作業』
此等運作環境是應採行 『Worksheet_Calculate()』 搭配 「名稱管理員」
內的『名稱定義』方式相輔相成,才是較實務的最佳選擇考量。
在此同時也感謝 GBKEE 大大的協力指導。

TOP

本帖最後由 藍天麗池 於 2016-4-11 09:51 編輯

回復 107# c_c_lai

所以,C大你的意思是,手動變更可以啟動程式,但程式對於DDE的判定有問題所以才無法啟動程式嗎??(白話文)

TOP

回復 108# 藍天麗池
是的,在此等運用環境是應採行 『Worksheet_Calculate()』 搭上 『名稱定義』
才為上上的作業考量。我相信你會從這兩隻程式的處裡中學習到更多的。

TOP

回復 109# c_c_lai

我真的從兩位大大身上學到不少,感謝

TOP

        靜思自在 : 【行善要及時】行善要及時,功德要持續。如燒開水一般,未燒開之前千萬不要停熄火候,否則重來就太費事了。
返回列表 上一主題