Я работаю над приложением MS Access, часть которого использует функцию распространения бета-версии. Поскольку у MS Access нет собственной функции бета-распространения, я использую функцию BetaDist из MS Excel. Я тестировал код в MS Excel и, похоже, успешно работает. В MS Access также хорошо работает код и генерирует правильные результаты, но время, затрачиваемое на Access, очень велико, чем время, затраченное Excel. Я размещаю часть кода, которая использует функцию BetaDist, а также самую медленную часть кода. Я хочу сократить время, затрачиваемое Access. Любая помощь приветствуется.Вызов функции MS Excel из MS Access VBA
часть кода, который использует БЕТАРАСП:
For i = 1 To UBound(arrBetaParam)
If arrBetaParam(i).Alpha <= 0 Or arrBetaParam(i).Beta <= 0 Or tryOutValue > arrBetaParam(i).ExpValue Then
dblTempEP = 0
Else
If tryOutValue > arrBetaParam(i).LastKnownGoodValue Then
dblTempEP = 0
Else
dblTempEP = 1
End If
Dim bt As Double
bt = -1
On Error Resume Next
bt = Excel.WorksheetFunction.BetaDist(tryOutValue, arrBetaParam(i).Alpha, arrBetaParam(i).Beta, 0, arrBetaParam(i).ExpValue)
tj = bt
If bt > -1 Then
If bt > 1 Then bt = 1
If bt < 0 Then bt = 0
arrBetaParam(i).LastKnownGoodValue = tryOutValue
dblTempEP = 1 - bt
End If
On Error GoTo 0
End If
OEP = OEP + dblTempEP * arrBetaParam(i).Rate
'sumRate = sumRate + arrBetaParam(i).Rate
Next
Ваш код должен начинаться Excel, который, вероятно, почему это занимает так много времени. Вы также останетесь с сиротским процессом excel.exe, выполняющим его таким образом. – Rory
Да. Но начнется ли и закроется предел для каждой итерации? – Nishith
Трудно сказать - я бы никогда не использовал неявные ссылки. Вы должны создать свой собственный экземпляр и использовать его, или написать/найти свою собственную функцию BetaDist. – Rory