返回列表 上一主題 發帖

棘手的excel運算問題,如何改善??

回復 29# c_c_lai

有,一直有變動

TOP

回復 30# 准提部林


    準大,我不太懂你的意思

TOP

回復 31# 藍天麗池
你把 ThisWorkbook 裡的函數內容稍加異動
然後予以儲存後,關閉重開 Excel:
  1. Option Explicit

  2. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  3.     Application.RTD.ThrottleInterval = 2000
  4.     Application.Calculation = xlCalculationAutomatic
  5. End Sub

  6. Private Sub Workbook_Open()
  7.     Application.RTD.ThrottleInterval = 0
  8.     Application.Calculation = xlCalculationManual
  9. End Sub
複製代碼
修改成:
  1. Option Explicit

  2. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  3.     Application.RTD.ThrottleInterval = 0
  4.     Application.Calculation = xlCalculationManual
  5. End Sub

  6. Private Sub Workbook_Open()
  7.     Application.RTD.ThrottleInterval = 2000
  8.     Application.Calculation = xlCalculationAutomatic
  9. End Sub
複製代碼
再重新試試看。
這便是准提部林版大問你的問題。

TOP

回復 33# c_c_lai


    可是之前這樣設定能跑,為什麼加了准大的程式之後就不能跑呢??

TOP

本帖最後由 c_c_lai 於 2016-1-29 07:38 編輯

回復 34# 藍天麗池
我前前後後查看了你與准提部林版大上傳分享的檔案,
發現問題仍然出自於你的自行再整合,准提部林版大
上傳的內容都沒加入 Workbook_Open() 的執行內容,
甚至在第一次給的 Xl0000328.rar 也亦將它 Marked 掉,
你只將它分享模組內的 Sub 統計() 直接貼入到你原本的檔案內
所以才會造成未能正常執行的原因。為幫助你更能明瞭版大
模組的運作,特予在其模組內每一循環細部分析解說,希望你
能進一步學習到如何運用,同時能增進你本身的自我觀察力。
我將三方的程式模組予以組合上傳上來,你測試看看結果如何。
解壓後便直接用它來執行測試,如此才得以觀測其測試結論。
明細變動記錄.rar (178.89 KB)

TOP

回復 35# c_c_lai

C大妳真是太細心了,感謝你,我先研究看看,謝謝

TOP

回復 36# 藍天麗池
最近有點事耽擱了。
你在 #10 裡的說明,要的是?

TOP

回復 37# c_c_lai


    測試C大的檔案後,發現可能執行太多東西,DDE都不太會跳動了,之前1秒跳7-8次,現在2-3秒跳動一次

TOP

回復 38# 藍天麗池
那你用我目前上傳的檔案來做測試看看。
測試完後告訴我一聲結果。
我先把准提部林版大分享的功能改為 統計A(),
先不予執行,而去執行我增加之測試模組
統計() ->dicStatics 你觀察看看進行順暢否?
明細變動記錄.rar (192.18 KB)

TOP

回復 38# 藍天麗池
  1. Sub 統計()        '  L、M、N、O 欄位統計
  2.     Dim DD As Date
  3.    
  4.     dicStatics
  5.     DD = Format(Now, "yyyy/mm/dd hh:mm")    '  DD = 2016/1/28 上午 12:41:00 : Date
  6.     TimeTxt = DD + 1 / 1440                 '  TimeTxt = 2016/1/28 上午 12:42:00 : Variant/Date
  7.     Application.OnTime TimeTxt, "統計"      '  每一分鐘自動再次執行一次。
  8. End Sub

  9. Sub dicStatics()
  10.     Dim txt As String, dic As Object, dic2 As Object, A As Range, sp As Variant

  11.     ' txt = [B2] & Left(CStr(Format([A2], "HH:MM:SS")), 5)
  12.     ' txt = [B2] & Left(CStr([A2]), 5)
  13.     '  MsgBox txt

  14.     Set dic = CreateObject("Scripting.Dictionary")
  15.     Set dic2 = CreateObject("Scripting.Dictionary")

  16.     For Each A In Range([A3], [A3].End(xlDown))
  17.         txt = A.Offset(, 1) & "," & Left(Format(A, "HH:MM:SS"), 5)
  18.         '  dic(txt) = IIf(IsEmpty(dic(txt)), A.Offset(, 4).Value + 1, dic(txt)) + A.Offset(, 4).Value
  19.         '  在 IsEmpty(dic(txt)) 判斷時, dic(txt) 會自動先賦予一次之 A.Offset(, 4).Value 值,然後再次
  20.         '  Assign 一次的 A.Offset(, 4).Value 值, 如 A.Offset(, 4).Value = -1,則結果會變成 -2。
  21.         '  是故改成如下方式,直接賦予一次之 A.Offset(, 4).Value 值,則結果便會變成 -1 (初始值設定)。
  22.         dic(txt) = dic(txt) + A.Offset(, 4).Value       '  次
  23.         dic2(txt) = dic2(txt) + A.Offset(, 2).Value     '  量
  24.     Next
  25.    
  26.     [M3].Resize(UBound(dic.Keys) + 1) = Application.Transpose(dic.Keys)                '  索引值就是 Keys
  27.     [N3].Resize(UBound(dic.Keys) + 1) = Application.Transpose(dic.Items)               '  資料內容就是 Items
  28.     [O3].Resize(UBound(dic2.Keys) + 1) = Application.Transpose(dic2.Items)               '  資料內容就是 Items
  29.    
  30.     With [M3].Resize(UBound(dic.Keys) + 1, 3)        '  Range("M3:M" & [M3].End(xlDown).Row)
  31.         .Cells.Sort Key1:=.Cells(1), Order1:=xlDescending, Header:=xlNo    '  xlAscending
  32.     End With
  33.    
  34.     For Each A In Range([M3], [M3].End(xlDown))
  35.         sp = Split(A, ",")
  36.         A.Offset(, -1) = sp(0)
  37.         A = sp(1)
  38.     Next
  39. End Sub
複製代碼

TOP

        靜思自在 : 口說好話、心想好意、身行好事。
返回列表 上一主題