【发布时间】:2020-01-08 03:41:43
【问题描述】:
我编写了一个函数,它根据日期和货币符号更新汇率 - 效果很好。但是当我想在我的工作表(在定义的范围内)中更改一些值(从 PLN 到例如 USD)时,循环被插入(以粗体线)。此外,保存汇率的范围更改为#ARG!。下面是函数和循环的代码:
Function PobierzKurs(kurs As String, data As Date)
Dim hReq As Object
Dim objxml As Object
Dim link As String
Dim odpowiedz As String
link = "http://api.nbp.pl/api/exchangerates/rates/a/" & kurs & "/" & Format(data, "yyyy-mm-dd") & "/?format=xml"
Set hReq = CreateObject("MSXML2.XMLHTTP")
With hReq
.Open "GET", link, False
.Send
End With
odpowiedz = hReq.ResponseText
If odpowiedz Like "*Brak danych" Then
PobierzKurs = "Brak danych"
Else
Set objxml = New MSXML2.DOMDocument60
objxml.LoadXML (odpowiedz)
PobierzKurs = objxml.DocumentElement.ChildNodes.Item(3).ChildNodes.Item(0).ChildNodes.Item(2).nodeTypedValue
PobierzKurs = CDbl(Replace(PobierzKurs, ".", ","))
End If
End Function
Dim rng As Range, r As Range, rFound As Range
Set rFound = Nothing
For Each r In Sheets("Raport").Range("K1:S5000")
If InStr(1, r.Text, "zł") > 0 Then
If rFound Is Nothing Then
Set rFound = r
Else
Set rFound = Union(rFound, r)
End If
End If
Next r
If Not rFound Is Nothing Then rFound.Select
For Each r In rFound
** r.Value = r.Value / Range("$L$14").Value**
r.NumberFormat = "#,##0.00 [$USD]"
Next r
真正有趣的是,前几天它运行良好。
【问题讨论】:
-
请见谅,上码和下码有什么关系?
-
尝试在
If Not rFound Is Nothing Then之后删除rFound.Select并在For Each r In rFound循环之后添加End if -
上层代码 - it
s function, which updates exchange rates Bottom code - its 是 CASE 结构的一部分 - 当我尝试执行宏时,它以粗体线显示失败 -
尝试转到您的工作表中此函数
PobierzKurs所在的范围,并可能重新应用它(F2+Enter,或者只选择它和Enter)。对我来说似乎很好,但可能是您遇到了一些连接问题。我想底部代码会抛出错误,因为Range("$L$14").Value不是数字。 -
也尝试在解析
Range("$L$14").Value之前指定工作表名称,例如Sheets("Sheet Name").Range("$L$14").Value。或者,在错误行之前添加Debug.Print r.Value, Range("$L$14").Value以查看即时窗口中的实际值。