Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Появилась ошибка 5 "Invalid procedure call or argument" после обновлений Windows 2019-08  [new]
Павел Фурсов
Member

Откуда: Украина
Сообщений: 109
Всем привет.

В очередной раз столкнулся с ошибками после обновления Windows.
На этот раз "зацепило" массивы, а именно пустые массивы ParamArray.

Для примера сформируем такой массив с помощью простой функции:
Private Function ParamArray_Variant(ParamArray Params())
    ParamArray_Variant = Params
End Function
Конечно можно работать с Params напрямую. Но я буду использовть эту функцию только для того, чтобы сформировать нужный массив.

Пусть далее будет:
Dim v
v = ParamArray_Variant

Для v:
  • IsMissing(v) = True
  • IsArray(v) = True
  • LBound(v) = 0
  • UBound(v) = -1

Теперь определим простой массив и попробуем сделать то же самое действие:
Dim a()
a = ParamArray_Variant 'Здесь нас ждет сюрприз в виде ошибки 5 "Invalid procedure call or argument".

Но если ParamArray массив не пустой, то все хорошо:
Dim b()
b = ParamArray_Variant(1) 'ОК

Теперь нельзя просто взять и присвоить обычному массиву значение произвольного массива ParamArray.

Нужно обязательно проверять на IsMissing. Например так:
Dim a()
Dim v: v = ParamArray_Variant
If Not VBA.IsMissing(v) Then a = v

Проблемные обновления вышли 13.08.2019 на всех платформах, включая Windows 10. Скорее всего был затронут код в oleaut32.dll.

С уважением,
Павел
15 авг 19, 11:52    [21949947]     Ответить | Цитировать Сообщить модератору
 Re: Появилась ошибка 5 "Invalid procedure call or argument" после обновлений Windows 2019-08  [new]
MrShin
Member

Откуда:
Сообщений: 1277
До меня, скорее всего, обновление еще не дошло, поэтому все работает. Для работы с массивами параметров использую такую функцию, она всегда возвращает массив
Public Function ParamArrayDelegated(ParamArray prms() As Variant) As Variant
    Dim arrPrms() As Variant, arrWrk() As Variant
    'When prms(0) is Array, supposed is delegated from another function
    On Error GoTo ErrorHandler
    arrPrms = prms
    If UBound(arrPrms) >= 0 Then
        Do While VarType(arrPrms(0)) >= vbArray And UBound(arrPrms) < 1
            arrWrk = arrPrms(0)
            arrPrms = arrWrk
            If UBound(arrPrms) < 0 Then
                Exit Do
            End If
        Loop
    End If
    ParamArrayDelegated = arrPrms
ExitHere:
    Exit Function
ErrorHandler:
    Debug.Assert Not (STOP_AT_ERROR And IS_DEV) '>> remove in release
    Err.Raise Err.Number, "ParamArrayDelegated of bas_Utilities", Err.Description & vbCrLf & "in ParamArrayDelegated of bas_Utilities at " & Erl
    Resume '>> remove in release
End Function
16 авг 19, 05:42    [21950644]     Ответить | Цитировать Сообщить модератору
 Re: Появилась ошибка 5 "Invalid procedure call or argument" после обновлений Windows 2019-08  [new]
an45liz
Member

Откуда:
Сообщений: 3
https://support.microsoft.com/ru-ru/help/4512506/windows-7-update-kb4512506
изучают проблему:
After installing this update, applications that were made using Visual Basic 6 (VB6), macros using Visual Basic for Applications (VBA), and scripts or apps using Visual Basic Scripting Edition (VBScript) may stop responding and you may receive an "invalid procedure call error."
16 авг 19, 06:32    [21950648]     Ответить | Цитировать Сообщить модератору
 Re: Появилась ошибка 5 "Invalid procedure call or argument" после обновлений Windows 2019-08  [new]
Павел Фурсов
Member

Откуда: Украина
Сообщений: 109
Здравствуйте.

В статье Sudden “Invalid procedure call or argument” error in VBA описаны различные варианты использования пустых массивов в VBA, которые после обновлений Windows перестали работать.

Также есть есть ссылки на патчи. Windows 10 1903 патча пока не имеет.

Основные рекомендации - откатить обновления, подождать новые версии обновлений без этих ошибок.
Также вы можете установить доступные патчи, которые уже выпущены.

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

С уважением,
Павел
29 авг 19, 17:36    [21960037]     Ответить | Цитировать Сообщить модератору
 Re: Появилась ошибка 5 "Invalid procedure call or argument" после обновлений Windows 2019-08  [new]
Павел Фурсов
Member

Откуда: Украина
Сообщений: 109
Здравствуйте,

Наконец-то выпущено обновление и под Windows 10 1903.
August 30, 2019—KB4512941 (OS Build 18362.329)

С уважением,
Павел
30 авг 19, 23:20    [21960959]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить