2019年8月15日木曜日

8月14日配信のWindows Updateによって引き起こされる、VB6のArray()関数の不具合について

Windows Update後に、VB6で開発したプログラムにて「エラー5:プロシージャの呼び出し、または引数が不正です」のエラーが発生するとの報告がありました。

VB6のArray()関数の挙動が、Windows Updateによって変わってしまったことが原因のようです。
以下のプログラムにて、17行目で上記エラーが発生します。

01: Option Explicit
02: 
03: Sub Main()
04: 
05:     Dim a As Variant
06:     a = GetArray()
07: 
08:     MsgBox CStr(UBound(a))
09: 
10: End Sub
11: 
12: Private Function GetArray() As Variant
13: 
14:     Dim a As Variant
15:     a = Array()
16: 
17:     GetArray = a
18: 
19: End Function

定義済みの変数に空っぽの配列を定義し、それをユーザー定義関数の戻り値にセットするとエラーとなってしまうようです。
今まで、私の知る中で、Windows UpdateによってVB6の標準関数の挙動が変化してしまったのは初ではないでしょうか。

VB6だけではなく、Excel VBAでも同様の現象が発生することを確認しました。
ただし、WSHのVBSではエラーが発生しません。

対応策としては、空っぽの配列の変数に代入する方法を、以下のように変更します。

15:     a = Split("/", "")

Array()で空っぽの配列を代入するかわりに、Split()関数にて空配列が代入されるようにします。