返回列表 上一主題 發帖

[發問] 如何找出網站原始檔網址

本帖最後由 GBKEE 於 2014-1-28 07:00 編輯

回復 31# pollllopkimo
  1. Option Explicit
  2. Sub 公開資訊網頁()
  3.     Dim A As Object, E As Object, Sh As Worksheet
  4.     Set Sh = Sheets("sheet1")  '物件: 指定工作表
  5.     Sh.Activate
  6.     With CreateObject("InternetExplorer.Application")
  7.         '.Visible = True
  8.         ' .Navigate "http://mops.twse.com.tw/mops/web/t164sb04"     '網址:綜合損益表
  9.         .Navigate "http://mops.twse.com.tw/mops/web/stapap1"        '網址:董監事持股餘額明細資
  10.         Do While .ReadyState <> 4 Or .Busy: DoEvents: Loop
  11.             .document.getElementById("isnew").Value = "false"       '選擇: 歷史資料
  12.             '註解上一行程式碼為 -> 選擇: 最新資料,不會執行 If 內程式碼
  13.            
  14.             If .document.getElementById("isnew").Value = "false" Then
  15.              .document.getElementById("isnew").FireEvent ("onchange")
  16.                 .document.getElementById("year").Value = Sh.Range("C1")       '年度
  17.                 '.document.getElementById("season").Value = "01"    '綜合損益表:第1季(季別)
  18.                 .document.getElementById("month").Value = Format(Sh.Range("D1"), "00")    '董監事持股餘額明細資料:月份
  19.             End If
  20.             '********************************************************************
  21.            For Each A In .document.getelementSbyTAGNAME("INPUT")
  22.            
  23.                 If A.Name = "co_id" Then A.Value = Sh.Range("b1")       '股票代號
  24.                
  25.                
  26.                 If A.Value = " 搜尋 " Then A.Click                     '按下 搜尋
  27.             Next
  28.             Do While .ReadyState <> 4 Or .Busy: DoEvents: Loop
  29.             For Each E In .document.ALL.TAGS("div")
  30.                 If E.ID = "table01" Then
  31.                     .document.body.innerHTML = E.outerHTML
  32.                     .ExecWB 17, 2       '  Select All
  33.                     .ExecWB 12, 2       '  Copy selection
  34.                     Do While .ReadyState <> 4 Or .Busy: DoEvents: Loop
  35.                     With Sh
  36.                         .UsedRange.Offset(4).Clear
  37.                         .Range("B5").Select
  38.                         .PasteSpecial Format:="HTML"
  39.                         .Range("B5").Select
  40.                         If .Shapes.Count > 0 Then  '有圖片
  41.                             .Shapes.SelectAll
  42.                             Selection.Delete
  43.                         End If
  44.                     End With
  45.                 End If
  46.             Next
  47.         .Quit                          '關閉 IE
  48.     End With
  49. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 34# blue2263
按F8逐行執行是哪一個程序
  1.   '****** 附檔沒這工作表
  2.     With Sheets("巨集工作表")
  3.         Set Rng(1) = .Range("B2")
  4.         .Activate
  5.     End With
  6.     'Sheets("匯總").UsedRange.Offset(1).Clear   '用此程式碼" 如需清除舊有資料
  7.     Do While Rng(1) <> ""
  8.         Rng(1).Activate
  9.         With Sheets("原始表")
  10.             .Range("B2") = Rng(1)
  11.             '****  .Range("E7") 沒有Web  **********
  12.             .Range("E7").QueryTable.Refresh BackgroundQuery:=False
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

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

回復 36# blue2263
  1. Sub Macro()
  2.     ' 報表整合1-new
  3.     Dim Rng As Range
  4.     On Error GoTo 101 '   'web 查無 到下一個代碼
  5.     Set Rng = Sheets("代碼").[a2]
  6.     Do While Rng(1) <> ""   '無代碼 中斷
  7.         With Sheets("原始表")
  8.             .Range("a6") = Rng
  9.             .Range("az7").QueryTable.Refresh BackgroundQuery:=False
  10.         End With
  11.         With Sheets("匯總").Range("A1").End(xlDown).Offset(1) '選擇工作表,到最底行
  12.                 .Range("A1:aw1").Value = Sheets("原始表").Range("A6:aw6").Value
  13.             End With
  14. 101
  15.          Set Rng = Rng.Offset(1)   '下一個代碼
  16.     Loop
  17. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2014-2-6 20:55 編輯

回復 38# blue2263
內有很多函數,所以造成資料更新會變的很慢,應該不是如此.
是否活頁簿的計算是手動,要改成自動



下列程式碼,工作表可不用函數算.
  1. Option Explicit
  2. Sub Macro()
  3.     ' 報表整合1-new
  4.     Dim Rng As Range, Ar(1 To 3)
  5.     On Error GoTo 101 '   'web 查無 到下一個代碼
  6.     Set Rng = Sheets("代碼").[a2]
  7.     Do While Rng <> ""   '無代碼 中斷
  8.         With Sheets("原始表")
  9.             .Range("a6") = Rng
  10.             .Range("az7").QueryTable.Refresh BackgroundQuery:=False
  11.             With .Range("BB12:BB27")
  12.                 Ar(1) = Application.Transpose(.Cells)         '人數
  13.                 Ar(2) = Application.Transpose(.Offset(, 1))   '股數
  14.                 Ar(3) = Application.Transpose(.Offset(, 2))   '佔集保庫存數比例 (%)
  15.             End With
  16.         End With
  17.         With Sheets("匯總").Range("A1").End(xlDown).Offset(1) '選擇工作表,到最底行
  18.              .Cells(1) = Rng
  19.              .Cells(1, 2) = Rng.Offset(, 1)
  20.              .Cells(1, "C").Resize(, UBound(Ar(1))) = Ar(1)
  21.              .Cells(1, "S").Resize(, UBound(Ar(1))) = Ar(2)
  22.              .Cells(1, "AI").Resize(, UBound(Ar(1))) = Ar(3)
  23.              .Cells(1, "AX") = ""
  24.             '.Range("A1:aw1").Value = Sheets("原始表").Range("A6:aw6").Value
  25.        End With
  26. 101
  27.          Set Rng = Rng.Offset(1)   '下一個代碼
  28.     Loop
  29. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 40# blue2263
直接讀取資料,比拐彎(函數計算)讀取資料當然是快的
在有刪工作表的檔案,用#39程式碼, 下載10個代碼,花了6秒,資料正確
在沒有刪工作表的檔案,用#39程式碼, 下載10個代碼,花了3分9秒,資料正確

在沒有刪工作表的檔案(函數太多),執行原來程式(程式執行迴圈一次,活頁簿的函數重算尚未完成)故得到資料不正確
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 犯錯出懺悔心,才能清淨無煩惱。
返回列表 上一主題