返回列表 上一主題 發帖

[發問] 程式執行速度越來越慢

回復 1# bulletin
工作表一直的 QueryTables.Add 新增Web查詢,檔案越來越龐大,拖慢程式的速度
  1. Option Explicit
  2. Sub DELETE_QueryTables()  '僅須執行一次清除所有QueryTable
  3.     Dim SH As Worksheet, Q As QueryTable
  4.     For Each SH In Sheets           '活頁簿的工作表集合物件
  5.         For Each Q In SH.QueryTables
  6.             Names(Q.Name).Delete    '刪除 定義名稱
  7.             Q.Delete                '刪除 QueryTable
  8.         Next
  9.     Next
  10. End Sub

  11. Sub Ex()
  12.     Dim stockid
  13.     stockid = 2303
  14.     With Sheets("CFSQ")
  15.         .Rows("1:64").ClearContents
  16.         If .QueryTables.Count > 1 Then
  17.             .QueryTables(1).Connection = "URL;http://dj.mybank.com.tw/z/zc/zc3/zc3_" & stockid & ".djhtm"
  18.         Else  '沒有QueryTable時新增
  19.              .QueryTables.Add Connection:="URL;http://dj.mybank.com.tw/z/zc/zc3/zc3_" & stockid & ".djhtm", Destination:=.Range("$A$1")
  20.         End If
  21.         With .QueryTables(1)  '不再新增
  22.             .AdjustColumnWidth = True
  23.             .RefreshPeriod = 0
  24.             .WebSelectionType = xlSpecifiedTables
  25.             .WebFormatting = xlWebFormattingNone
  26.             .WebTables = "3"
  27.             .WebPreFormattedTextToColumns = True
  28.             .WebConsecutiveDelimitersAsOne = True
  29.             .Refresh BackgroundQuery:=False
  30.         End With
  31.     End With
  32. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2014-2-6 06:43 編輯

回復 3# bulletin
Sub DELETE_QueryTables()  複製在何模組上,執行一次可清除所有工作表上QueryTable
  1. Option Explicit
  2. Private Sub CommandButton1_Click()
  3.     Dim StartTime, LastRow
  4.     StartTime = Timer
  5.     Application.ScreenUpdating = False
  6.     LastRow = Sheets("sheet1").Range("A2").End(xlDown).Row '找出最後一筆資料
  7.     For i = 1 To LastRow
  8.         Dim stockid
  9.         stockid = Range("A" & i).Value
  10.         Application.Wait Now + TimeValue("00:00:01")
  11.         With Sheets("CFSQ")
  12.             .Rows("1:64").ClearContents
  13.             '******************************
  14.             If .QueryTables.Count > 1 Then
  15.                 .QueryTables(1).Connection = "URL;http://dj.mybank.com.tw/z/zc/zc3/zc3_" & stockid & ".djhtm"
  16.             Else  '沒有QueryTable時新增
  17.                 .QueryTables.Add Connection:="URL;http://dj.mybank.com.tw/z/zc/zc3/zc3_" & stockid & ".djhtm", Destination:=.Range("$A$1")
  18.             End If
  19.             With .QueryTables(1)  '不再新增
  20.                 .AdjustColumnWidth = True
  21.                 .RefreshPeriod = 0
  22.                 .WebSelectionType = xlSpecifiedTables
  23.                 .WebFormatting = xlWebFormattingNone
  24.                 .WebTables = "3"
  25.                 .WebPreFormattedTextToColumns = True
  26.                 .WebConsecutiveDelimitersAsOne = True
  27.                 .Refresh BackgroundQuery:=False
  28.             End With
  29.             '******************************
  30.        End With
  31.       
  32.        With Sheets("ISQ")
  33.            .Rows("1:64").ClearContents
  34.            '套上修改 .QueryTables(1).Connection =??? .QueryTables.Add Connection=???
  35.        End With
  36.       
  37.        With Sheets("BSQ")
  38.            .Rows("1:64").ClearContents
  39.            '套上修改 .QueryTables(1).Connection =??? .QueryTables.Add Connection=???
  40.            '.WebTables = """oMainTable""" 須修改
  41.            End With
  42.        End With
  43.        '程式碼
  44.        '
  45.        '
  46.     Next
  47. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2014-2-6 13:17 編輯

回復 5# bulletin
另存新檔時,有的檔案有內容,有的檔案沒內容,會是網頁上那檔股票沒有資料?
你附檔存檔的速度沒有你說的慢.
  1. Sub DELETE_QueryTables()  '僅須執行一次清除所有QueryTable
  2.     Dim SH As Worksheet, Q As Variant
  3.     For Each Q In Names
  4.         Q.Delete
  5.     Next
  6.     For Each SH In Sheets           '活頁簿的工作表集合物件
  7.         For Each Q In SH.QueryTables
  8.            Q.Delete
  9.         Next
  10.     Next
  11. End Sub
複製代碼
  1. Private Sub CommandButton1_Click()
  2.     Dim StartTime
  3.     DELETE_QueryTables  '**建議先清除***
  4.     StartTime = Timer
  5.     Application.ScreenUpdating = False
  6.     LastRow = Sheets("sheet1").Range("A2").End(xlDown).Row '找出最後一筆資料
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 7# bulletin
2.呼叫Delete_Querytables時,發生1004錯誤
因執行太多次的
  1. With .QueryTables.Add(Connection:=
複製代碼
造成許多Name的位置都相同,導致第1版的Sub DELETE_QueryTables()的錯誤
所以改用 第2版的Sub DELETE_QueryTables()的程式碼





3.BSQ工作表空白問題, 可查是哪一檔股票看網頁是否也無資料
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 稻穗結得越飽滿,越會往下垂,一個人越有成就,就要越有謙沖的胸襟。
返回列表 上一主題