返回列表 上一主題 發帖

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

本帖最後由 GBKEE 於 2016-4-10 14:28 編輯

回復 37# 藍天麗池
  1. Option Explicit
  2. Private Sub Workbook_Open()
  3.     Dim xRng As Range, First_Aaddres  As String, xRng_Name As String
  4.     Application.Calculation = xlCalculationAutomatic
  5.     With Sheets("RTD")
  6.         Set xRng = .Rows(2).Cells.Find("TotalVolume", LookIn:=xlFormulas)
  7.         If Not xRng Is Nothing Then
  8.             First_Aaddres = xRng.Address
  9.             Do
  10.                  xRng_Name = Split(xRng.Formula, "'")(1)
  11.                  xRng_Name = "TotalVolume" & Split(xRng_Name, ".")(0)
  12.                 .Names.Add xRng_Name, xRng  ''名稱定義:所有總量的Dee公式的儲存格
  13.                 Set xRng = .Rows(2).Cells.FindNext(xRng)
  14.             Loop Until xRng.Address = First_Aaddres
  15.         End If
  16.     End With
  17. End Sub
複製代碼
重算事件試試看
  1. Option Explicit
  2. Private Sub Worksheet_Calculate()
  3.         Dim Rng As Range, E As Variant
  4.         On Error Resume Next ' 檔案開啟時 DEE傳回錯誤值
  5.         Set Rng = UsedRange.Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
  6.         If Not Rng Is Nothing Then Exit Sub
  7.         On Error GoTo 0 '開盤不再處理程式碼的錯誤
  8.        If Time < #9:00:00 AM# Or Time > #1:31:00 PM# Then Exit Sub '非營業時間
  9.         For Each E In Me.Names
  10.             If E.Name Like "*TotalVolume*" Then   '總量的名稱
  11.                 If Range(E.Name) > 0 Then
  12.                     With Cells(Rows.Count, Range(E.Name).Column).End(xlUp)  ''總量名稱所在的最底列往上到有資料的儲存格
  13.                             If .Row = 2 Or .Row > 2 And .Value <> Range(E.Name).Value Then
  14.                                 .Offset(1).Cells(1, -2).Resize(, 4) = Range(E.Name).Cells(, -2).Resize(, 4).Value
  15.                             End If
  16.                     End With
  17.                 End If
  18.             End If
  19.         Next
  20. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2016-4-9 08:46 編輯

回復 41# 藍天麗池
37帖的檔案
ThisWorkbook
  1. Private Sub Workbook_Open()
複製代碼
Sheet
  1. Private Sub Worksheet_Calculate()
複製代碼
是啊,螢幕看久眼睛會痛,上線的時間需控制一下.
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2016-4-9 09:14 編輯

回復 44# 藍天麗池
今天沒營業,請問測試方式

再解釋一下,程式的邏輯
檔案開啟時 定義了Sheets("RTD")所有總量Dee公式的儲存格
  1. Private Sub Workbook_Open()
  2. With Sheets("RTD")
  3. '''
  4. .Names.Add xRng_Name, xRng  ''名稱定義:Sheets("RTD")所有各股總量Dee公式的儲存格
  5. '''
複製代碼
Sheets("RTD")工作表上任何有公式儲存格值有變動,啟動Sheets("RTD")的Worksheet_Calculate事件
  1. Private Sub Worksheet_Calculate()
  2.         Dim Rng As Range, E As Variant
  3.         On Error Resume Next ' 檔案開啟時 DEE傳回錯誤值
  4.         Set Rng = UsedRange.Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
  5.         If Not Rng Is Nothing Then Exit Sub
  6.         On Error GoTo 0 '開盤不再處理程式碼的錯誤
  7.         For Each E In Me.Names
  8.             If E.Name Like "*TotalVolume*" Then   '各股總量的名稱
  9.                 If Range(E.Name) > 0 Then                 '總量>0
  10.                     With Cells(Rows.Count, Range(E.Name).Column).End(xlUp)  ''總量名稱所在的最底列往上到有資料的儲存格
  11.                             If .Row = 2 Or .Row > 2 And .Value <> Range(E.Name).Value Then '(各股總量有變動)
  12.                                 '******************************************
  13.                                 '最底列往上有資料的儲存格<>'總量的值
  14.                                 .Offset(1).Cells(1, -2).Resize(, 4) = Range(E.Name).Cells(, -2).Resize(, 4).Value
  15.                                 '******************************************
  16.                             End If
  17.                     End With
  18.                 End If
  19.             End If
  20.         Next
  21. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2016-4-9 10:05 編輯

回復 51# 藍天麗池
須先改為自動重算
  1. Private Sub Workbook_Open()
  2.     Dim xRng As Range, First_Aaddres  As String, xRng_Name As String
  3.     Application.RTD.ThrottleInterval = 0
  4.     Application.Calculation = xlCalculationAutomatic  '自動重算
  5. With Sheets("RTD")
  6.         Set xRng = .Rows(2).Cells.Find("TotalVolume", LookIn:=xlFormulas)
  7.         If Not xRng Is Nothing Then
  8. '
  9. '
  10.    
複製代碼
  1. Sub Ex()
  2.     Dim i As Integer
  3.     With Sheets("RTD")
  4.         .Range("a" & Rows.Count) = "=a1"   '啟動第一次 Worksheet_Calculate
  5.         i = 1
  6.         For i = 1 To i * 4 * 8 Step 2
  7.             With .Cells(Rows.Count, 4 * i).End(xlUp).Offset(1)
  8.                 .Value = Int((500 - 100 + 1) * Rnd + 100)
  9.                 '總量名稱所在的最底列往上到有資料的儲存格給亂數
  10.                 ''因沒營業DEE不會變動,所以給個亂數
  11.                 '等同DEE總量有變動
  12.             End With
  13.             .[a1] = i                  ' 公式值再度變動啟動 Worksheet_Calculate
  14.         Next
  15.     End With
  16. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 62# 藍天麗池
有設為自動重算嗎?
  1. Applicaion.Calculation = xlCalculationAutomatic  '自動重算
複製代碼
手動是執行所給的Ex程式嗎?
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 67# c_c_lai
DEE公式值的變動,儲存格內公式參照其他工作表,計算後值的改變.
不會觸發 Private Sub Worksheet_Change(ByVal Target As Range)事件程式

回復 64# 藍天麗池
手動是改成交量,需是 (DEE公式 或 儲存格內公式 ) 值的改變
1 請複製39帖的 Private Sub Workbook_Open() 到ThisWorkbook模組後執行一次
2 請複製39帖的Private Sub Worksheet_Calculate() 到Sheets("RTD") 模組
3請在 Sheets("RTD")上有DEE總量公式的 D2,H2,,, 輸入公式=工作表2!A1
4請在 工作表2!A1輸入>0的任意數值
5看看 Sheets("RTD")的變動
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2016-4-9 19:05 編輯

回復 70# c_c_lai
即第三列每欄內容為 A3 (=A2), B3 (=B2), C3 (=C2),. . . . .如此便能觸發事件了。

Ex.zip (6.7 KB)    還是不行...
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 72# c_c_lai
Worksheet_Calculate() 是無法判斷哪個儲存格觸發的.
39 帖 的Private Sub Workbook_Open()
中有.Names.Add xRng_Name, xRng  ''名稱定義:所有總量的Dee公式的儲存格
當Worksheet_Calculate重算事件執行時
  For Each E In Me.Names 去判斷總量有變動,則記錄下來.

回復 75# 藍天麗池
這測試是正確的,沒營業DEE不會變動,總量的下方列位測試給值,假裝總量有變動

當Worksheet_Calculate重算事件執行時
  For Each E In Me.Names  去判斷總量有變動,則記錄下來.

星期一營業前打開檔案試試看
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 84# c_c_lai
39帖  補上非營業時間不執行程式
  1. Private Sub Worksheet_Calculate()
  2.         Dim Rng As Range, E As Variant
  3.         On Error Resume Next ' 檔案開啟時 DEE傳回錯誤值
  4.         Set Rng = UsedRange.Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
  5.         If Not Rng Is Nothing Then Exit Sub
  6.         On Error GoTo 0 '開盤不再處理程式碼的錯誤
  7.         If Time < #9:00:00 AM# Or Time > #1:31:00 PM# Then Exit Sub '非營業時間
  8.         For Each E In Me.Names
  9.             If E.Name Like "*TotalVolume*" Then   '總量的名稱
  10.                 If Range(E.Name) > 0 Then
  11.                     With Cells(Rows.Count, Range(E.Name).Column).End(xlUp)  ''總量名稱所在的最底列往上到有資料的儲存格
  12.                             If .Row = 2 Or .Row > 2 And .Value <> Range(E.Name).Value Then
  13.                                 .Offset(1).Cells(1, -2).Resize(, 4) = Range(E.Name).Cells(, -2).Resize(, 4).Value
  14.                             End If
  15.                     End With
  16.                 End If
  17.             End If
  18.         Next
  19. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2016-4-13 08:42 編輯

回復 114# c_c_lai
  1. Option Explicit
  2. Private Sub Worksheet_Calculate()
  3.     Dim Rng As Range, cts As Long
  4.     If Time < #8:30:00 AM# Or Time > #1:31:00 PM# Then Exit Sub     '  非營業時間
  5.     On Error GoTo ER:
  6.     For cts = 4 To Columns.Count Step 4
  7.         Set Rng = Cells(2, cts)
  8.         With Cells(Rows.Count, cts).End(xlUp)
  9.             '  總量名稱所在的最底列往上到有資料的儲存格
  10.             If .Row = 2 Or .Row > 2 And .Value <> Rng.Value Then      '  (各股總量有變動)
  11.                 .Offset(1, 1).NumberFormatLocal = "hh:mm:ss"          '  設定儲存格格式 (時間)
  12.                 .Offset(1).Cells(1, -1).Resize(, 4) = Rng.Cells(, -1).Resize(, 4).Value
  13.             End If
  14.         End With
  15.     Next cts
  16. ER:
  17.     Stop
  18.     MsgBox "錯誤值  " & Err & VBLF &  " cts=" & cts & " - " & Rng.Address & "  最後的總量是工作表的最右欄 ->  .Resize(, 4).Value :超出工作表範圍"    Resume   
  19. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 犯錯出懺悔心,才能清淨無煩惱。
返回列表 上一主題