LoginSignup
3
1

More than 5 years have passed since last update.

VBA.IsMissingの致命的な問題

Last updated at Posted at 2017-03-23

概要

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

関連

Missingを能動的に取得する - Qiita

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1