Как исправить подпрограмму VBA, которая не может получить свойство Forecast из функции Worksheet, пожалуйста - PullRequest
0 голосов
/ 02 апреля 2019

первый пост, поэтому прошу прощения за основные вопросы.И я только изучаю VBA ...

Я унаследовал "внешний интерфейс" базы данных Access для создания отчетов из базы данных SQL.

До наступления нового финансового года, 1 апрелявесь код работал нормально.

Но я обновляю запросы и процедуры для 2019/20 и обнаружил ошибку времени выполнения 1004 "Невозможно получить свойство Forecast класса WorksheetFunction"

КогдаЯ переключаюсь на отладку в редакторе VBA. Я направлен на следующую строку кода:

dblForecast = xlApp.WorksheetFunction.Forecast (CDbl (dtDate - 1), intKnownSurg, dblKnownDates)

подпрограмма должна помещать вывод массива в таблицу с именем t_Activity_Surgery_FinancialYear, на которую есть ссылка в коде.

Однако эта таблица теперь пуста, хотя в режиме конструктора отображаются правильные имена полей и типы данных.

Обычно я ожидал бы, что подпрограмма будет выполняться, и приведенная выше таблица будет заполнена самыми последними данными.Не оставляйте пустым.

Предположение, которое я делаю, состоит в том, что приведенная выше функция xlApp.WorksheetFunction больше недоступна или ее диапазон слишком мал или неправильно определен.Но я не могу найти это, чтобы изменить это.

Кто-нибудь может помочь с этим, пожалуйста?

Вот фрагмент кода, который, я думаю, вызывает проблему.Я ценю любые предложения.

    ' Calculate our year-end forecast based on activity to date
    dblForecast = xlApp.WorksheetFunction.Forecast(CDbl(dtDate - 1), intKnownSurg, dblKnownDates)

    ' Now save our array to our output table
    Set rsOutput = CurrentDb.OpenRecordset(strOutputTable)
    For i = 0 To UBound(varArray)
        If IsDate(varArray(i, 0)) Then
            rsOutput.AddNew
            rsOutput("ProcDate") = varArray(i, 0)
            rsOutput("Trajectory") = varArray(i, 3)
            If varArray(i, 0) < Date Then
                ' Only provide rolling total figures upto the current date
                rsOutput("Surgeries") = varArray(i, 1)
                rsOutput("Surgeries_RT") = varArray(i, 2)
            ElseIf varArray(i, 0) = Date Then
                ' Only provide rolling total figures upto the current date
                rsOutput("Surgeries") = varArray(i, 1)
                rsOutput("Surgeries_RT") = varArray(i, 2)
                ' Set our current & last year's rolling activity
                rsOutput("PositionToday") = varArray(i, 2)
                rsOutput("TargetToday") = varArray(i, 3)
            ElseIf varArray(i, 0) = dtEndDate Then
                If dtEndDate <= Date Then
                    ' This is either the last day of the year or we are looking back
                    ' on a past year, so only show the target figure (not forecast)
                    rsOutput("Target") = 405
                Else
                    ' Set our forecast and target on the last date in the range
                    rsOutput("Forecast") = dblForecast
                    rsOutput("Target") = 405
                End If

            End If

            rsOutput.Update
        End If
    Next i

    ' Housekeeping
    DoCmd.SetWarnings True
    rsInput_TY.Close
    rsOutput.Close
    xlApp.Quit

    Set rsInput_TY = Nothing
    Set rsOutput = Nothing
    Set xlApp = Nothing
End Sub

...