返回列表 上一主題 發帖

[發問] [求助]資料查詢沒有回應

回復 1# herhsiu

你的檔案怪怪的,
我用單步模式跑 Workbook_Open() 程序,
執行到 :
Range("C2") = Year(Date) & Format(Month(Date), "00") & Format(Day(Date), "00")
這一行時VBA執行緒會直接跳到
Function Trans2Mon(str As String)   ~    End Function  這個功能區塊內,
且一直重複著執行此功能,
即便已經執行到 Exit Function 或是 End Function,
照樣下一步還是跑 Function Trans2Mon(str As String) 這行,(即又重頭開始跑...無限迴圈?)
我也看不出來為什麼會發生這樣的現象.

因為搜遍整個專案都沒看到呼叫 Trans2Mon 功能的敘述,
所以我試著把該功能的程序整個都給它 Mark 掉之後,
再按 "海撈" 按鍵程式跑起來就變快了.
另 因為我發現轉檔過程中股票代號都沒隨之更新,
所以我嘗試修改了一下 GetMonData 程序 :
  1.          If [a3] <> "" Then
  2.             [b1] = stkno
  3.             StkName = [a3]
  4.             Exit For
  5.          Else
複製代碼
Query-A.zip (93.38 KB)

TOP

本帖最後由 luhpro 於 2013-10-2 23:32 編輯

回復 5# GBKEE
嗯...有看到了,謝謝你告訴我.

不過就像我上面所說的,
我再次用單步跑過Workbook_Open一遍,
發現即使該功能只有在 Sheets("進階整理") 中才有公式去引用到,
然而即便只是變更 Sheets("股票代碼") 裡的儲存格內容(根本與該Function無關),
那個 Function Trans2Mon 仍然是把所有有引用到該公式的儲存格全部都重新計算一次, (任一Sheet中的任何一個儲存格內容變更,它都會全部都再計算一輪 O.O" )
難怪把那個 Function 拿掉後速度差那麼多.

我試了一下, 把那 12 個儲存格公式改為 :
  1. =CONCATENATE(MID(INDIRECT(ADDRESS(221 - (COLUMN() - 2)  * 20,1,1,1,"近一年資料"),1),6,3),"/",MID(INDIRECT(ADDRESS(221 - (COLUMN() - 2)  * 20,1,1,1,"近一年資料"),1),10,2))
複製代碼
就可以把  Function Trans2Mon 拿掉了,
感覺上速度似乎有比較快.
甚至若把 INDIRECT(ADDRESS(221 - (COLUMN() - 2)  * 20,1,1,1,"近一年資料"),1) 分割出來另用儲存格存放,
公式也能更簡化, 速度應該也會更快.

我想我以後會儘量避免在儲存格公式中引用 Function,
因為非必要的計算動作-loading 太重太多了.

TOP

        靜思自在 : 人事的艱難與琢磨,就是一種考驗。
返回列表 上一主題