返回列表 上一主題 發帖

DDE動態資料如何定時篩選?

回復 1# corcovado886
你的意思是這樣?

TOP

本帖最後由 c_c_lai 於 2015-11-19 09:30 編輯

回復 3# corcovado886
是否如此結果?
  1. Sub 自動記錄()
  2.     Dim cts As Integer
  3.     If uMode = 0 Then Exit Sub
  4.     If Time > TimeValue(EndTime) Then '收盤時間以後不執行
  5.         Sht1.[W4] = "已過收盤"
  6.         uMode = 0
  7.         Exit Sub
  8.     End If
  9.     With Sht1
  10.         .Range("W2") = Time '當前時間(時間碼表)
  11.         '----------------------------------------------------------
  12.         '每1分鐘記錄,5分鐘則改為 Mod 5
  13.         If Second(Time) Mod 3 = 0 Then
  14.             xRow = .Range("A65536").End(xlUp).Row + 1 '從最後一格往上尋找有資料的儲存格, 是在第幾列,然後再加1列
  15.             If xRow < 11 Then xRow = 11 '如果列數小於11,則從第11列開始
  16.             .Range("A" & xRow & ":V" & xRow).Value = .Range("A2:V2").Value
  17.            For cts = 1 To 22
  18.                 .Range(Chr(64 + cts) & xRow).Font.Color = IIf(.Range(Chr(64 + cts) & xRow).Value >= 9, vbRed, vbBlack)
  19.             Next
  20.             .Range("W" & xRow).Value = Time 'W欄位的時間值往下記錄
  21.             '------------------------------------------------
  22.             If ActiveSheet.Name = .Name And xRow > 20 Then
  23.                 ActiveWindow.ScrollRow = xRow - 12 '讓最新資料保持在可見視窗中
  24.             End If
  25.         End If
  26.     End With
  27.     Application.OnTime Now + TimeValue("00:00:01"), "自動記錄"   '每一秒遞迴一次
  28. End Sub
複製代碼

TOP

回復 3# corcovado886
  1.                 ActiveWindow.ScrollRow = xRow - 12   '  讓最新資料保持在可見視窗中
複製代碼
修改成如下,較吻合事實。即最新一筆資料永遠會保持在可見視窗中最底筆。
  1.                 ActiveWindow.ScrollRow = xRow - 11   '  讓最新一筆資料保持在可見視窗中最底筆
複製代碼

TOP

回復 6# corcovado886
是這樣?
  1. Sub 自動記錄()
  2.     Dim cts As Integer, A As Range, Rng As Range
  3.    
  4.     If uMode = 0 Then Exit Sub
  5.     If Time > TimeValue(EndTime) Then '收盤時間以後不執行
  6.         Sht1.[W4] = "已過收盤"
  7.         uMode = 0
  8.         Exit Sub
  9.     End If
  10.     With Sht1
  11.         .Range("W2") = Time '當前時間(時間碼表)
  12.         '----------------------------------------------------------
  13.         '每1分鐘記錄,5分鐘則改為 Mod 5
  14.         If Second(Time) Mod 3 = 0 Then
  15.             xRow = .Range("A65536").End(xlUp).Row + 1 '從最後一格往上尋找有資料的儲存格, 是在第幾列,然後再加1列
  16.             If xRow < 11 Then xRow = 11 '如果列數小於11,則從第11列開始
  17.             .Range("A" & xRow & ":V" & xRow).Value = .Range("A2:V2").Value
  18.             .[B6:V6].ClearContents
  19.             Set Rng = .[B6]
  20.             cts = 0
  21.             For Each A In .Range("A" & xRow & ":V" & xRow)
  22.                 cts = cts + 1
  23.                 If (A.Value >= 9) Then
  24.                     '  A.Font.Color = vbRed
  25.                     Rng.Value = .Range(Chr(64 + cts) & 10).Value
  26.                     Set Rng = Rng.Offset(, 1)
  27.                 Else
  28.                     '  A.Font.Color = vbBlack
  29.                 End If
  30.             Next
  31.             .Range("W" & xRow).Value = Time 'W欄位的時間值往下記錄
  32.             '------------------------------------------------
  33.             If ActiveSheet.Name = .Name And xRow > 20 Then
  34.                 ActiveWindow.ScrollRow = xRow - 11   '  讓最新一筆資料保持在可見視窗中最底筆
  35.             End If
  36.         End If
  37.     End With
  38.     Application.OnTime Now + TimeValue("00:00:01"), "自動記錄"   '每一秒遞迴一次
  39. End Sub
複製代碼

TOP

回復 8# corcovado886
  1. Rng.Value = .Range(Chr(64 + cts) & 10).Value
複製代碼
也可以寫成如下:
  1. Rng = .Range(Chr(64 + cts) & 10)
複製代碼
當 cts = 1 時,64 +  1 = 65,
ASC(65) = 'A'。 .Range(Chr(64 + cts) & 10) = .Range("A10")
當 cts = 2 時,64 +  2 = 66,
ASC(66) = 'B'。  .Range(Chr(64 + cts) & 10) = .Range("B10")
以此類推。

TOP

本帖最後由 c_c_lai 於 2015-11-29 08:04 編輯

回復 10# corcovado886
以下範例只演算到 A ~ AZ,如果實務值有超出 AZ 者,
依下面例子再往下繼續演算 ( IIf( ... , ... , ...  ) )下去:
  1. .Range(IIf(cts > 26, "A" & Chr(64 + cts - 26), Chr(64 + cts)) & 10)
複製代碼

TOP

        靜思自在 : 欣賞別人就是莊嚴自己。
返回列表 上一主題