- 帖子
- 49
- 主題
- 18
- 精華
- 0
- 積分
- 154
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- XP
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2010-6-16
- 最後登錄
- 2024-8-5
|
4#
發表於 2014-6-16 18:12
| 只看該作者
本帖最後由 sasho 於 2014-6-16 18:16 編輯
回復 2# GBKEE
感謝G大的指點,但可能我表達的不是很清楚,所以讓大家誤會我的問題了
跟G大所示範的一樣,程式再匯入網頁資料後都會另存成一個CSV檔案並關閉,
同時,將所新增的querytable delete掉,程式碼如下:- Sub 取得資料(strURL As String, Table As String)
- Dim xlSheet As Excel.Worksheet
- Set xlSheet = Sheets("Temp")
- Do
- Application.DisplayAlerts = False
- With xlSheet.QueryTables.Add("URL;" & strURL, xlSheet.Cells(1, 1))
- .WebFormatting = xlWebFormattingNone
- .WebSelectionType = xlSpecifiedTables
- .WebTables = Table
- .BackgroundQuery = False
- On Error Resume Next
- Do
- Err.Clear
- .Refresh 0
-
- If Err.Number Then
- Application.Wait Now + TimeValue("00:00:01")
- End If
- Loop Until Err.Number = 0
-
- .Delete
- 'If Err.Number <> 0 Then Err.Clear: MsgBox Err.Number '被免資料抓取不成功,而顯示訊息
-
- On Error GoTo 0
- End With
- If Err.Number = 0 Then
- Application.DisplayAlerts = True
- Exit Sub
- End If
- Loop
- 儲存CSV DownloadDate,id
- End Sub
- Sub 儲存CSV(SaveDate As String, CSVname As String)
-
- Dim TestObj As Object
- Dim CSVfile As String, CSVfolder As String
- Dim TestFolder As Boolean
-
- FilePath = "D:\TSE\"
- CSVfolder = FilePath & SaveDate & "\"
- CSVfile = CSVfolder & CSVname & "_" & SaveDate & ".csv"
- 'Debug.Print CSVfile
-
- Set TestObj = CreateObject("Scripting.FileSystemObject")
- TestFolder = TestObj.FolderExists(CSVfolder)
- If TestFolder = False Then TestObj.CreateFolder (CSVfolder)
- On Error Resume Next
- Kill CSVfile
- On Error GoTo 0
- Worksheets(Tempname).Copy
- Application.DisplayAlerts = False
- With ActiveWorkbook
- .SaveAs FileName:=CSVfile, FileFormat:=xlCSV
- .Close 0
- End With
- Application.DisplayAlerts = True
-
- End Sub
複製代碼 我的問題是在於,由於我用迴圈一共要抓幾百筆的資料
我從儲存下來的檔案最後變動時間觀察,發現一開始可能一秒鐘可以抓五到六個檔案
但到後面,可能一秒鐘就只能抓兩個檔案,檔案大小都差不多
一直不知道為什麼速度會越來越慢,每抓完一筆檔案就執行一次 doevents
所以應該不至於造成CPU資源被吃光
唯一能想到的就是,每次另存一個檔案,就會新開一個活頁簿
比方說,活頁簿1、活頁簿2、活頁簿3....到最後的活頁簿999
雖然把資料複製過去後、另存新檔後該活頁簿就會關閉,但EXCEL好像還是會占用到記憶體資源
是不是因為這樣才導致速度越來越慢呢?
還是說,是因為我複製的方式不正確才會導致記憶體增加的呢?
G大跟我的差別在於,匯入資料後G大是workbook.add然後複製匯入的range
而我則是直接將整個worksheet copy
不曉得這兩者的方式有差嗎
謝謝各位前輩指點 m(_ _)m |
|