用于检索XML数据的Excel自定义函数
我想创建一个自定义函数,用于检索XML URL链接形式的特定可用数据。这是我第一次在Excel中处理XML,更不用说VBA了,我正在努力解决它 我已经能够编写一个程序(本地货币汇率检索),只需按下自定义按钮即可运行该程序,该程序运行以下代码:用于检索XML数据的Excel自定义函数,xml,vba,excel,Xml,Vba,Excel,我想创建一个自定义函数,用于检索XML URL链接形式的特定可用数据。这是我第一次在Excel中处理XML,更不用说VBA了,我正在努力解决它 我已经能够编写一个程序(本地货币汇率检索),只需按下自定义按钮即可运行该程序,该程序运行以下代码: Sub FX_Retrieve() Dim FX As String Dim CustomDate As String FX = Range("FX") CustomDate = Range("CustomDate")
Sub FX_Retrieve()
Dim FX As String
Dim CustomDate As String
FX = Range("FX")
CustomDate = Range("CustomDate")
Application.ScreenUpdating = False
ActiveSheet.Unprotect
Rows(2).Clear
ActiveWorkbook.XmlImport URL:= _
"http://www.cbu.uz/section/rates/widget/xml/" & FX & "/" & CustomDate, ImportMap:= _
Nothing, Overwrite:=True, Destination:=Range("C2")
Range("D:D").EntireColumn.AutoFit
Rows(2).HorizontalAlignment = xlCenter
Columns(6).ClearContents
ActiveSheet.Protect
Application.ScreenUpdating = True
End Sub
以防万一,XML输出如下所示:
2015-12-29
美元
2809.98
1.
因此,在我的代码中需要一些格式
在外汇汇率单次调用的情况下,该程序没有问题!
现在,我想更进一步,创建一个函数。这就是我提出几个问题的原因:
2015-12-29
美元
2809.98
1.
我已经发现了类似的东西(如这里:),但我无法将其应用到我的案例中
任何帮助都将不胜感激 多亏了@Dick Kusleika运行的AnalystCave.com网站,我才能够将网站上关于“使用XML文件”的信息应用到我的问题中,并成功地解决了这个问题。为了防止有人有同样的问题,下面是我的代码(我只希望它在编程上是有效的):
公共函数getCurrtuzs(ByRef Curr作为字符串,ByRef date_param作为日期)作为货币
作为对象的Dim XDoc
模糊列表
灰暗的孩子
将日期设置为字符串
如果Len(Curr)3那么
MsgBox“货币名称必须有3个字母长!”,vbCritical+vbOKOnly_
,“变量错误!”
退出功能
如果结束
'将输入的日期更正为所需的格式“YYYY-MM-DD”
corrDate=年(日期参数)&“-”月(日期参数)&“-”日(日期参数)
设置XDoc=CreateObject(“MSXML2.DOMDocument”)
XDoc.async=False:XDoc.validateOnParse=False
XDoc.Load“http://www.cbu.uz/section/rates/widget/xml/“&Curr&”/“&corrDate”
'获取文档元素
Set lists=XDoc.DocumentElement
Set getThirdChild=lists.ChildNodes(2)
GetCurrtuzs=getThirdChild.Text'函数的输出
Set XDoc=Nothing'终止XDoc对象
端函数
<response>
<date_act>2015-12-29</date_act>
<symbol>USD</symbol>
<rate>2809.98</rate>
<size>1</size>
</response>
Public Function GetCurrToUZS(ByRef Curr As String, ByRef date_param As Date) As Currency
Dim XDoc As Object
Dim lists
Dim getThirdChild
Dim corrDate As String
If Len(Curr) <> 3 Then
MsgBox "Currency name must be 3 letters long!", vbCritical + vbOKOnly _
, "VARIABLE ERROR!"
Exit Function
End If
'corrects the entered date to the required format of "YYYY-MM-DD"
corrDate = Year(date_param) & "-" & Month(date_param) & "-" & Day(date_param)
Set XDoc = CreateObject("MSXML2.DOMDocument")
XDoc.async = False: XDoc.validateOnParse = False
XDoc.Load "http://www.cbu.uz/section/rates/widget/xml/" & Curr & "/" & corrDate
'Get Document Elements
Set lists = XDoc.DocumentElement
Set getThirdChild = lists.ChildNodes(2)
GetCurrToUZS = getThirdChild.Text 'output of the function
Set XDoc = Nothing 'terminates xDoc Object
End Function