返回列表 上一主題 發帖

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

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

回復 91# 藍天麗池
你是指?

你不是要求資料寫入時不用寫入時間嗎?

TOP

回復 96# 藍天麗池
那你就將 "時間()" 刪除掉或不去執行它
不就得了。那是你原本的程式。我是不用它的。

TOP

本帖最後由 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

本帖最後由 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

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

TOP

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

TOP

回復 110# 藍天麗池
明早再幫我測試一下這隻 "股票10C.xlsm" 的程式,
這隻是單獨只採用 Worksheet_Calculate() 方法,
並無應用 "名稱定義" 的方式。
說白點只單純直接    Worksheet_Calculate() 進行
資料寫入。 如有了測試結果再行告知我,謝謝!
股票10C.rar (21.87 KB)
P.S.  我想確認它的評效,如 OK 了,則會建議你採用。

TOP

回復 113# 藍天麗池
出現甚麼錯誤訊息?

TOP

本帖最後由 c_c_lai 於 2016-4-12 10:13 編輯

回復 113# 藍天麗池
今天你是甚麼時間開啟 "股票10C.xlsm" 的,看圖片猜應你是於盤前便開啟它,
因為未開盤時帶入值為 #N/A,為保險起見將判斷 "營業時間" 略為挪後
  1. If Time < #8:30:00 AM# Or Time > #1:31:00 PM# Then Exit Sub     '  非營業時間
複製代碼
修改成
  1. If Time < #8:35:00 AM# Or Time > #1:31:00 PM# Then Exit Sub     '  非營業時間
複製代碼
如此"公式" 欄 便能傳入 正確的"DDE 匯入值" 了。
目前你先將第三列刪除,儲存檔案後,於 "營業時間" 內
再從新啟動試試!

TOP

回復 116# GBKEE
應該是如我 #117 所說的狀況,複製 #N/A 時出現型態不符的訊息。

TOP

        靜思自在 : 布施如播種,以歡喜心滋潤種子,才會發芽。
返回列表 上一主題