2016-07-08 9 views
0

などの単純なMsgBoxに、表示する場合:はなぜMsgBoxには、バイトの変数を必要としない[VBA]

MsgBox("Hello World!") 

が正常に動作し、なぜもう少し書き込まれる「高度な」メッセージボックスがいないこのように:

Dim DisplayMsgBox as Byte 
DisplayMsgBox = MsgBox("Hello world!", vbOKOnly, "Say Hi") 

「追加の添付ファイル」がない「通常の」MsgBoxのように、このようにしなければならない特別な理由はありますか? (ので、このような:)

MsgBox("Hello world!", vbOKOnly, "Say Hi") 
+1

あなたは 'MsgBox" Hello world! "を実行できますが、' = 'を使うときはvbOKOnly、" Say Hi "'( ')'が必要です。 –

+2

'()'が好きであれば、 'Call'を前に置く' MsgBox( "Hello world!"、vbOKOnly、 "Say Hi") ' –

+0

を呼んでください。今私は何かを表現する3つの新しいメソッドがあります:) @ScottCraner –

答えて

1

使用:

Dim DisplayMsgBox as Byte 
DisplayMsgBox = MsgBox("Hello world!", vbOKOnly, "Say Hi") 

DisplayMsgBoxは、ボタンの値が

はこれを試してみて、違いを見て押し取得します

Sub Test_MsgBox_Result() 
Dim DisplayMsgBox As Byte 
DisplayMsgBox = MsgBox("Hello world!", vbOKOnly, "Say Hi") 
MsgBox "The value of Ok is " & DisplayMsgBox 
DisplayMsgBox = MsgBox("Hello world!", vbYesNo, "Say Hi") 
If DisplayMsgBox = vbYes Then 
    MsgBox "The value of Yes is " & DisplayMsgBox 
Else 
    MsgBox "The value of No is " & DisplayMsgBox 
End If 
DisplayMsgBox = MsgBox("Hello world!", vbYesNoCancel, "Say Hi") 
If DisplayMsgBox = vbYes Then 
    MsgBox "The value of Yes is " & DisplayMsgBox 
ElseIf DisplayMsgBox = vbNo Then 
    MsgBox "The value of No is " & DisplayMsgBox 
Else 
    MsgBox "The value of Cancel is " & DisplayMsgBox 
End If 
End Sub 

詳細はhere

+0

ありがとう、それは本当に多くの助け:) –

2

戻り値の型はByteではなく、vbMsgBoxResultのenum値です。

MSDNのドキュメントを見つけるのは難しくなってきていますが、とにかくRubberduckであなたは、戻り値の型を確認し、状況依存のラベルが特徴のCommandBar取得:

Rubberduck commandbar

実際にロードするから来ていますプロジェクトの参照されているCOMライブラリを参照し、COMタイプとそのメンバーを繰り返します(私はRubberduckリポジトリを所有しています)。

vbMsgBoxResultEnumされ、基になる型がLong、ないByteです - あなたは簡単即時ペインでこれを確認することができます。括弧については

?TypeName(VbMsgBoxResult.vbOK) 
Long 

、特別なことは何もありませんについてMsgBox - これは、他のすべての手順と同じ構文です。

この作品の理由:あなたは(!それは括弧が行うことだ)値によって渡される文字列引数​​を強制しているので

そして、これがない理由

MsgBox ("Test") 

です作品は:1つの引数が関数にByValを渡されるとVBAが"Test", vbOkOnlyを評価することはできませんので

MsgBox ("Test", vbOkOnly) 

です。

MsgBox ("Test"), (vbOkOnly) 

をしかし、愚かになります

これが働くだろう。

Call MsgBox("Test", vbOkOnly) 
:あなたのようなVBA Functionを呼び出すには、あなたは括弧をドロップするか、[時代遅れ]明示的な Call構文を使用する Sub(つまり、あなたは、戻り値を気にしない場合)必要があります

関連する問題