Ошибка перенастройки Excel VBA XIRR при использовании формата даты за пределами США

Я новичок здесь и новичок в VBA и программировании в целом. Перебрал кучу потоков здесь и в других местах, но не смог найти решение, которое работает.

Я пытаюсь запустить функцию XIRR в VBA и продолжаю получать ошибки во время выполнения, когда Windows установлена ​​на европейский формат даты (дд / мм / гггг). Как только я изменяю формат даты в Windows на американский (мм / дд / гггг), он работает просто отлично.

Мой XIRR получает два массива, содержащих платежи и даты, и самое забавное, что когда я печатаю эти массивы на лист и пытаюсь запустить XIRR на листе, он работает независимо от формата даты.

Все даты вводятся с помощью функции excel =Date() или рассчитываются в коде с помощью функции CoupNCD().

Я использую Windows 8 & Excel 2013 Мой код ниже. Спасибо!

Sub runXIRR()
Dim Price As Single, Cpn As Single, x As Single 'Price holds security current price, Cpn holds coupon rate
Dim i As Integer, j As Integer, cpnPay As Integer 'cpnPay holds the number of annual coupon payments
Dim CrntD As Date, lPayD As Date 'CrntD holds current date, lPayD hold security maturity date
Dim cpnLst() As Single 'array to hold cash flows as input to XIRR
Dim dLst() As Date 'array to hold payment dates as input to XIRR
'get input from spreadsheet
Price = Cells(1, 2).Value
lPayD = Cells(2, 2).Value
Cpn = Cells(3, 2).Value
cpnPay = Cells(4, 2).Value
CrntD = Cells(5, 2).Value

i = WorksheetFunction.CoupNum(CrntD, lPayD, cpnPay) 'calc number of payments to be made
ReDim cpnLst(1 To i + 1)
ReDim dLst(1 To i + 1)
For j = 1 To i + 1 'set cpnLst & dLst with payment values and dates for XIRR, first payment/date is current date with Price as negative
    If j = 1 Then
        cpnLst(1) = -Price
        dLst(1) = CrntD
    Else:
        dLst(j) = WorksheetFunction.CoupNcd(CrntD, lPayD, cpnPay)
        cpnLst(j) = Cpn / cpnPay
        CrntD = dLst(j)
    End If
    'print values to spreadsheet
    Cells(1 + j, 5).Value = cpnLst(j)
    Cells(1 + j, 6).Value = dLst(j)
Next j
x = Application.Xirr(cpnLst, dLst)
MsgBox x
End Sub

0 ответов

Другие вопросы по тегам