Excel 更新汇率-VBA-运行时错误13类型不匹配

Excel 更新汇率-VBA-运行时错误13类型不匹配,excel,vba,Excel,Vba,我已经编写了一个函数,它根据日期和货币符号更新汇率,并且运行良好。但是,当我想更改工作表中(定义范围内)的某些值(例如,从PLN更改为USD)时,循环将被解释(以粗体显示)。此外,保存汇率的范围将更改为#ARG!。下面是函数和循环的代码: Function PobierzKurs(kurs As String, data As Date) Dim hReq As Object Dim objxml As Object Dim link As String Dim

我已经编写了一个函数,它根据日期和货币符号更新汇率,并且运行良好。但是,当我想更改工作表中(定义范围内)的某些值(例如,从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
真正有趣的是,几天前它工作得很好


每次第二个宏将值从波兰兹罗提转换为美元时,它都会重新计算用于检索外汇汇率的函数(
函数PobierzKurs

由于循环过程很快,您的函数有时没有足够的时间重新计算给定的汇率,因此会出现错误。它还解释了为什么使用断点遍历代码会产生结果(当手动单步遍历代码时,
函数PobierzKurs
有足够的时间重新计算FX值)

有两种可能的解决方案,您可以在自己的方面尝试-

1)您可以在代码的最开头添加
Application.Calculation=xlCalculationManual
(带有
r.Value
)并使用
Application.Calculation=xlCalculationAutomatic


2)您可以将单元格L14的值存储在变量中(例如,
dim lngFX,只要长
/
lngFX=Sheets(“Raport”)。范围(“L14”).Value
然后在您的计算中使用它:
r.Value=r.Value/lngFX

请原谅,但是上面的代码和下面的代码之间有什么联系?请尝试删除
rFound。如果没有rFound是空的,请在
之后选择
如果没有rFound是空的,则在
之后为rFound中的每个r添加
End
-它
s函数,用于更新汇率底部代码-它是案例结构的一部分-当我尝试执行宏时,它以粗体显示失败尝试转到工作表中此函数
PobierzKurs
所在的范围,并可能重新应用它(
F2
+
Enter
,或者只需选择它并
Enter
)。我觉得这很好,但可能是因为您存在一些连接问题。我想底部的代码抛出了一个错误,因为
范围($L$14”)。值
不是一个数字。在解析
范围($L$14”)之前,请尝试指定工作表名称.Value
,例如
工作表(“工作表名称”).Range($L$14”).Value
。或者,在错误行之前添加
Debug.Print r.Value,Range($L$14”).Value
,以查看即时窗口中的实际值。第一个解决方案非常有效!非常感谢!
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