- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
43#
發表於 2015-11-18 08:04
| 只看該作者
回復 42# chang0833
是這樣嗎?- Option Explicit
- Sub Ex()
- Dim URL As String, xCo_Id As String
- Dim xSyear As Integer, xSseason As Integer
- Dim Sh(1 To 2) As Worksheet, Rng As Range
-
- xCo_Id = Application.InputBox("請輸入股票代號", , 2303) '預設為 2303
- xSyear = Format(Date, "E") '中華民國的年度
- xSseason = DatePart("q", Date) '當季
- Application.ScreenUpdating = False
- 'Set Wb = ThisWorkbook '指定活頁簿
- With ThisWorkbook '指定活頁簿
- Set Sh(1) = .Sheets.Add '新增工作表: 複製季財報到指定工作頁
- Set Sh(2) = .Sheets.Add '新增工作表: WEB查詢用
- End With
- On Error GoTo Er '處理程式上的錯誤
- Application.DisplayAlerts = False
- Sh(1).Name = xCo_Id & "季報表" '這名稱工作表如已存在程式會有錯誤
- Set Rng = Sh(1).[A1]
- On Error GoTo 0 '不再處理程式上的錯誤
-
- Do
- URL = "URL;http://mops.twse.com.tw/server-java/t164sb01?step=1&CO_ID=" & xCo_Id & "&SYEAR=" & xSyear & "&SSEASON=" & xSseason & "&REPORT_ID=C"
- With Sh(2).QueryTables.Add(Connection:=URL, Destination:=Sh(2).[A1])
- .Name = xCo_Id & "_" & xSyear & "_第" & xSseason & "季" 'WEB查詢的名稱
- .AdjustColumnWidth = True '自動調整欄寬
- .WebSelectionType = xlSpecifiedTables
- .WebFormatting = xlWebFormattingNone
- .WebTables = "2,3,4" '資產負債表,綜合損益表,現金流量表
- .WebPreFormattedTextToColumns = True
- .WebConsecutiveDelimitersAsOne = True
- .WebSingleBlockTextImport = False
- .WebDisableDateRecognition = False
- .WebDisableRedirections = False
- .Refresh BackgroundQuery:=False
- If .ResultRange.Rows.Count > 2 Then '有資料
- Debug.Print xSyear, xSseason, Rng.Address
- .ResultRange.Copy Rng
- Set Rng = Rng.Offset(, .ResultRange.Columns.Count + 1)
- Else
- .Delete
- End If
- End With
- xSseason = xSseason - 1
- If xSseason = 0 Then
- xSseason = 4
- xSyear = xSyear - 1
- End If
- Loop Until xSyear = Format(Date, "E") - 3
-
- Sh(2).Delete
- Application.DisplayAlerts = True
- Application.ScreenUpdating = True
- ' Sh(1).Parent.Save
- MsgBox "Ok"
- Exit Sub
- Er: '處理 xCo_Id &季報表 工作表已存在
- Sheets(xCo_Id & "季報表").Delete '覆蓋原工作頁嗎?(只留下最後更新的資料)
-
- Resume '回到錯誤的程式碼
- End Sub
複製代碼 |
|