我想创建一个自定义函数,以XML URL链接的形式检索可用的特定数据。这是我第一次在Excel中处理XML,更不用说VBA,并且正在努力解决它。
我已经能够编写一个程序(本地货币汇率检索),只需按下自定义按钮即可运行该程序,该按钮运行以下代码:
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 因此,我的代码中需要一些格式化。
单次调用外汇汇率时,该程序没问题! 现在,我想进一步了解并创建一个函数。这就是我提出几个问题的地方:
<response>
<date_act>2015-12-29</date_act>
<symbol>USD</symbol>
<rate>2809.98</rate>
<size>1</size>
</response>
我已经找到类似的内容(如此处:Excel VBA getting specific node from XML),但我无法在我的情况下应用它。
非常感谢任何帮助!
答案 0 :(得分:0)
感谢@Dick Kusleika运营的AnalystCave.com网站,我已经能够根据&#34;使用XML文件&#34;我的问题并成功解决了它。万一有人遇到同样的问题,这是我的代码(我希望它在编程上有效):
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