VBAには #If というものがある。通常の If ではなく、音楽記号でいうところのシャープが付いているものだ。
Sub dispVer()
Dim iVal As Integeri
iVal = Application.Version
#If iVal = 7 Then
MsgBox 95
#ElseIf iVal = 8 Then
MsgBox 97
#ElseIf iVal = 9 Then
MsgBox 2000
#ElseIf iVal = 10 Then
MsgBox 2002
#ElseIf iVal = 11 Then
MsgBox 2003
#ElseIf iVal = 12 Then
MsgBox 2007
#Else
MsgBox iVal
#End If
End Sub
この例、まともに動作するだろうか?おそらくは Else に流れていってしまうだろう。
#If では通常の If のような判定はできないのである。
では、何が出来るのか?上記を簡単に書き換えると
Sub dispVer()
#Const iVal = 11
#If iVal = 7 Then
MsgBox 95
#ElseIf iVal = 8 Then
MsgBox 97
#ElseIf iVal = 9 Then
MsgBox 2000
#ElseIf iVal = 10 Then
MsgBox 2002
#ElseIf iVal = 11 Then
MsgBox 2003
#ElseIf iVal = 12 Then
MsgBox 2007
#Else
MsgBox iVal
#End If
End Sub
上記の例では #Const で定義した値を判定させているが、リテラル値も可能だ。しかし変数は不可である。
つまり、用途としては
Sub Debugsample()
#Const bDebug = True
Dim iVal As Integer
iVal = 10 + 20
#If bDebug Then
Debug.Print iVal
#End If
End Su
というように、デバッグ時の切り替えか、MacかWin16、Win32かの判定くらいにしか使えない。
ならば If と大差なさそうだが、最大の相違点は「その条件に合わない場合は完全に無視する」ということ。つまり、Macのみ/Winのみでサポートされる命令を記述すると、If であればコンパイル時にエラーが出るが、#If ではエラーが出ないのだ。 つまり、実行時に評価されることになる。
これにより、Mac/Winの独自命令も混在させることができる。
なお、バージョン間の処理の際を吸収するニーズの方が多いだろう。確か、過去にクラスモジュールを使って行った記憶がある(ちょっと怪しい)。それもそのうちに紹介できればと思う。
ブログトップへ
ブログ内検索キーワード
クラス
バージョン