Board logo

標題: Excel VBA抓取股票資料 [打印本頁]

作者: elufa    時間: 2015-2-21 13:17     標題: Excel VBA抓取股票資料

VBA程式碼如下
view source
print?
001        Option Explicit
002         
003        '股票類別
004        '01 水泥工業
005        '02 食品工業
006        '03 塑膠工業
007        '04 紡織纖維
008        '05 電機機械
009        '06 電器電纜
010        '07 化學生技醫療
011        '08 玻璃陶瓷
012        '09 造紙工業
013        '10 鋼鐵工業
014        '11 橡膠工業
015        '12 汽車工業
016        '13 電子工業
017        '14 建材營造
018        '15 航運業
019        '16 觀光事業
020        '17 金融保險業
021        '18 金融保險業
022        '19 綜合企業
023        '20 其他
024        '21 化學工業
025        '22 生技醫療業
026        '23 油電燃氣業
027        '24 半導體業
028        '25 電腦及週邊設備業
029        '26 光電業
030        '27 通信網路業
031        '28 電子零組件業
032        '29 電子通路業
033        '30 資訊服務業
034        '31 其他電子業
035         
036        Dim Tempsheet As Excel.Worksheet
037         
038        Private Sub 更新股票資料_Click()
039            抓取股票基本資料
040        End Sub
041         
042        Sub 抓取股票基本資料()
043            Dim n As Integer
044            Dim StartTime
045             
046            StartTime = Now
047         
048            If 確認工作表存在("Temp") <> True Then
049                Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Temp"
050            End If
051             
052            清除工作表 ("Sheet1")
053            清除工作表 ("Temp")
054             
055            Application.ScreenUpdating = False
056             
057            Set Tempsheet = Sheets("Temp")
058             
059            If 取得股票資料 = 0 Then
060                MsgBox "無法抓取股票資料"
061                Exit Sub
062            End If
063          
064            Application.StatusBar = "正在轉換資料,請稍後......"
065             
066            With Sheet1
067                .Cells(1, 1) = "股票代碼"
068                .Cells(1, 2) = "公司名稱"
069                
070                n = 取得公司間數
071                Tempsheet.Range("A1:B" & n).Copy    '目前只列出股票代碼、公司名稱,如有需要其他欄位,請自行變更
072             
073                .Cells(2, 1).Select
074                .Paste
075            End With
076             
077            Application.StatusBar = "股票基本資料抓取完成"
078            Application.ScreenUpdating = True
079             
080            MsgBox "股票基本資料下載 共花費 " & Format(Now - StartTime, "HH時mm分ss秒") & " 下載完成。" & vbCrLf & "以秒計算 共花費 " & DateDiff("s", StartTime, Now) & " 秒下載完成", vbInformation
081         
082        End Sub
083         
084        Sub 清除工作表(xlWSName As String)
085            Dim qyt As QueryTable
086            With Worksheets(xlWSName)
087                For Each qyt In .QueryTables
088                    qyt.Delete
089                Next
090             
091                .Cells.Clear
092                .Cells.ClearContents
093            End With
094        End Sub
095         
096        Function 取得公司間數()
097            Dim i As Integer, j As Integer, n As Integer
098            j = 0
099            取得公司間數 = 0
100            With Tempsheet
101                n = .Cells(65536, 1).End(xlUp).Row
102                For i = 1 To n
103                    If .Cells(i, 1).Value = Empty Or _
104                       .Cells(i, 1).Value = "代號" Or _
105                       .Cells(i, 1).Value = "公司" Then
106                        j = j + 1
107                        .Rows(i & ":" & i).Delete Shift:=xlUp
108                        If n - j >= i Then
109                            i = i - 1
110                        End If
111                     End If
112                Next
113                取得公司間數 = .Cells(65536, 1).End(xlUp).Row
114            End With
115        End Function
116         
117        Function 取得股票資料()
118            Dim xlURL As String
119             
120            Application.StatusBar = "從Web取得股票資料中,請稍後......"
121             
122            xlURL = "http://mops.twse.com.tw/mops/web/ajax_t51sb01?step=1&firstin=1&TYPEK=sii" '上市 sii, 上櫃 otc
123            With Tempsheet.QueryTables.Add("URL;" & xlURL, Tempsheet.Cells(1, 1))
124                .WebFormatting = xlWebFormattingNone
125                .WebTables = "2"
126                .Refresh 0
127                If Application.Count(.ResultRange) = 0 Then
128                    取得股票資料 = 0
129                    Exit Function
130                End If
131                取得股票資料 = Application.Count(.ResultRange)
132                .Delete
133            End With
134        End Function
135         
136        Function 確認工作表存在(xlWSName As String) As Boolean
137            On Error Resume Next
138            Dim xlTemp As Excel.Worksheet
139             
140            Set xlTemp = Worksheets(xlWSName)
141            If Not xlTemp Is Nothing Then
142                確認工作表存在 = True
143                On Error GoTo 0
144                Set xlTemp = Nothing
145                Exit Function
146            End If
147             
148            確認工作表存在 = False
149            On Error GoTo 0
150            Set xlTemp = Nothing
151        End Function
作者: budinlong    時間: 2015-3-14 17:20

報告elufa,不能執行,有很多指令和空白會卡住




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)