первый пост, поэтому прошу прощения за основные вопросы.И я только изучаю 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