概要
VBA.IsMissing
関数を特定条件下で使用したとき、ホストアプリケーションを巻き込んで強制終了してしまう。
確認環境
Office2010 32bit on Windows 7 64bit
Office2016 64bit on Windows 10 64bit
サンプルコード
ホストアプリケーションで何も重要なファイルを開いていない状態で、FatalErrOfIsMissing
プロシージャを実行してください。
Sub FatalErrOfIsMissing()
Dim tmp() As Variant
Call TestIsMissing(tmp)
End Sub
Private Sub TestIsMissing(Optional ByVal arg As Variant)
Call VBA.IsMissing(arg)
End Sub
条件詳細
送る変数
宣言だけされたVariant型の動的配列。
他の型の配列や、Array()
では発生しない。
引数の宣言
ByValで宣言(ByRefでは発生しない)。
対策
Missing
はエラー値の一種のため、予めIsError
関数でフィルターすればこの問題を回避できる。
Public Function IsMissing(ArgName As Variant) As Boolean
If VBA.IsError(ArgName) Then _
Let IsMissing = VBA.IsMissing(ArgName)
'Else return False
End Function