返回列表 上一主題 發帖

[發問] 跑到一半會卡住~~

本帖最後由 GBKEE 於 2016-12-3 17:02 編輯

回復 8# power82843
3708 上緯投控  沒有資料
  1. Range("C1:C500").Find("股東權益報酬率").Select
複製代碼
卡在這裡是嗎?
試試看
  1. Option Explicit
  2. Sub Ex_ROE()
  3.     Dim Sh(1 To 3) As Worksheet, Rng As Range, i As Integer
  4.     Set Sh(1) = Sheets("個股資料")
  5.     Set Sh(2) = Worksheets("ROE總表")
  6.     Set Sh(3) = Worksheets("ROE")
  7.    
  8.     '***執行本程式碼一次後,可刪除掉兩行星號間的程式碼**
  9.     '*************************************
  10.     '刪除 ROE 頁上QueryTables及 QueryTables.Add所新增的名稱
  11.     'QueryTable過多,名稱過多也是檔案膨大的原因之ㄧ
  12.     With Sh(3)
  13.         For i = .Names.Count To 1 Step -1
  14.             .Names(i).Delete
  15.         Next
  16.         .UsedRange.Clear
  17.         For i = .QueryTables.Count To 1 Step -1
  18.           .QueryTables(i).Delete
  19.        Next
  20.     End With
  21.     '******************************
  22.     With Sh(2)
  23.         .UsedRange.Clear
  24.         .Range("B1") = "++++++++++++++++++++++++++++++++++++++++++++++++++++"
  25.         .Range("B2:J2") = Array("期別", "104", "103", "102", "101", "100", "99", "98", "97")
  26.         .Activate
  27.     End With
  28.     For i = 10 To Sh(1).Range("B281").End(xlDown).Row
  29.         If Sh(1).Range("B" & i) <> "" Then   '非空白儲存格
  30.             With Sh(3).QueryTables.Add(Connection:= _
  31.                 "URL;http://stockchannelnew.sinotrade.com.tw/z/zc/zcr/zcra/zcra_" & Sh(1).Range("B" & i) & ".djhtm", Destination:=Sh(3).Range("B1"))
  32.                 '.Name = "0000000"  '名稱以數字開頭,會自動加上"_" 為 "_0000000"
  33.                 .WebSelectionType = xlSpecifiedTables
  34.                 .WebFormatting = xlWebFormattingNone
  35.                 .WebTables = "1"
  36.                 .WebPreFormattedTextToColumns = True
  37.                 .WebConsecutiveDelimitersAsOne = True
  38.                 .WebSingleBlockTextImport = False
  39.                 .WebDisableDateRecognition = False
  40.                 .WebDisableRedirections = False
  41.                 .Refresh BackgroundQuery:=False
  42.             End With
  43.             With Sh(3).QueryTables(1)
  44.                 Application.StatusBar = i - 9 & " - " & .ResultRange.Range("b2") & "   股東權益報酬率 完成"
  45.                 If .ResultRange.Rows.Count > 5 Then
  46.                     Sh(2).Range("b1").End(xlDown).Offset(1, -1).Resize(, .ResultRange.Columns.Count) = .ResultRange.Rows(16).Value
  47.                     Sh(2).Range("b1").End(xlDown).Offset(, -1) = Sh(1).Range("C" & i)
  48.                     Sh(2).Range("b1").End(xlDown).Offset(, -1).Activate
  49.                 Else
  50.                     Sh(2).Range("b1").End(xlDown).Offset(1) = "查無 " & .ResultRange.Range("b2") & " 財務比率表資料(合併年表)"
  51.                 End If
  52.                 .ResultRange.Clear                 '清除匯入外部的資料
  53.                 Sh(3).Names(.Name).Delete   '刪除自動新增的名稱
  54.                 .Delete                                    '刪除 QueryTable 物件
  55.             End With
  56.         End If
  57.     Next
  58. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

執行了三次, 都可以順利跑完:
Xl0000003.rar (288.27 KB)

TOP

本帖最後由 jackyq 於 2016-12-3 18:55 編輯

發現是  QueryTables 積累太多的關係
加上這個就好了

For Each QQ In Worksheets("ROE").QueryTables
QQ.Delete
Next

我看准提部林已經幫你加上 delete
結果還會卡
才會以為是不是被鎖IP
結果加上 delay 後就可以跑完
才會以為真的被鎖 IP

結論: 不砍 QueryTables 用 delay 後就可以跑, 當然比較慢

TOP

回復 10# 准提部林
請問遇到這樣的情況要如何避免?

TOP

回復 14# power82843


被鎖住ip, 應會出現錯誤視窗, 而且也應無法再執行, 除非清除所有的瀏覽歷程及cookie(依以前抓奇摩知識+經驗),
如果是沒有跑完到工作表的最後一筆資料, 應是 End(xlDown)的問題, 遇到空白格就停頓, 改用End(xlUp)即可,
以目前的資枓, End(xlDown) , 第368列[2301 光寶科]就是最後一筆!

For i = 10 To [個股資料!B1].Cells(Rows.Count, 1).End(xlUp).Row
則可以跑到第890列!!!

TOP

        靜思自在 : 看別人不順眼,是自己修養不夠。
返回列表 上一主題