欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Excel vba 读取上证指数

程序员文章站 2022-05-16 09:29:36
...



Public Sub 抓上海指数全部()
'删除上次结果sheet
delectsh


Dim ie, dmt, an, selectONE
Set ie = CreateObject("InternetExplorer.Application") '创建一个IE对象
With ie
.Visible = False '显示它
.navigate "http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/000001/type/S.phtml" '加载某个页面
Do Until .ReadyState = 4 '等待页面加载完毕
DoEvents
Loop
Set dmt = .document '将IE浏览器加载的页面文档,赋予dmt变量
Set selectONE = dmt.getElementsByName("year")

With selectONE
Set option_year = .Item(0)
For i = 0 To option_year.Length - 1
Dim year
year = option_year.Item(i).innerText
'创建年份sheet
newsheet (year)
抓上海指数按年 (year)
Next i
End With


End With
Set ie = Nothing

End Sub

Function 抓上海指数按年(year As String)
Dim URL, last_row, i
last_row = 0
Cells.Clear
For i = 1 To 4
'http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/000001/type/S.phtml?year=2012&jidu=2
URL = "http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/000001/type/S.phtml?year=" & year & "&jidu=" & i

Set sheet_year = Worksheets(year)
With sheet_year.QueryTables.Add(Connection:= _
"URL;" & URL, _
Destination:=sheet_year.Range("A" & last_row + 1))
.WebTables = "FundHoldSharesTable"
.Refresh BackgroundQuery:=False
End With
last_row = sheet_year.[A65536].End(xlUp).Row
Set sheet_year = Nothing

Next
End Function

Public Sub delectsh()
Dim c As Worksheet
For Each c In Worksheets
If Left(c.name, 3) <> "set" Then '这里的“set”区分大小写
Application.DisplayAlerts = False '删除时不用确认
c.Delete
End If
Next c
End Sub


Function newsheet(name As String)
sname = name
'Sheets(Sheets.Count).name
'abc = DateSerial(Left(sname, 4), Mid(sname, 5, 2), Right(sname, 2)) + 1
'sname = year(abc) & Format(Month(abc), "00") & Format(Day(abc), "00")
'===========================================================
Sheets.Add
ActiveSheet.name = sname
'===========================================================
End Function


相关标签: vba