- ベストアンサー
プログラムの初歩的な質問 ( )について
例えばVBAのコードで、「msgbox ~」と「msgbox(~)」では、何が違うのですか? 特に()が有っても無くても、うまくコンパイルできる時もあれば、 コンパイルエラーなどと表示されることもあります。 ()で囲む時と囲まない時の使い分けが、よく分かりません。 どなたか教えていただけないでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
そのメッセージボックスに表示させたボタンのアクションを値として取り出すかどうかによって変わります。 もし次のようなコードを記述したとします。 msgbox ("メッセージ" ,vbYesNo , "タイトル") vbYesNoと入れたため、これを実行すると ダイアログ内に[はい]ボタンと[いいえ]ボタンが表示されます。 ただ表示させるだけならば()をつけてもつけなくても変わりがありません。 ですが、[はい]ボタンを押した時と[いいえ]ボタンを押した時の動きを変えたい場合は、()つきで記述しないといけないのです。 これはサンプルコードです。 Sub Sumple1() If msgbox ("メッセージ" ,vbYesNo , "タイトル") = vbYes Then msgbox "はいが押されました", vbYesNo, "結果" Else msgbox "いいえが押されました", vbYesNo, "結果" End If End Sub ここでは一つ目のダイアログではいを押した場合、vbYesという値が出てくるため、IFで条件式に使っています。
その他の回答 (5)
- Ishiwara
- ベストアンサー率24% (462/1914)
私もさんざん苦労した記憶があります。要するに、説明資料(ヘルプなど)が悪いのです。 msgbox は、非常に特殊な機能で、次の使い方があります。 (1) 関数として使う msgbox (...) 戻り値は、vbOK など(整数と考えてもよい) (2) ステートメントとしてサブプログラムを呼び出す call msgbox (...)、または msgbox ... 戻り値が必要なのであれば、関数を使ったほうが、行数が少なくて済むという利点があります。
- dsuekichi
- ベストアンサー率64% (171/265)
VBAのヘルプで「Call ステートメント」を調べてみてください。 解説の部分に以下の記述があると思います。 -------------------------------------------------------- プロシージャを呼び出すとき、キーワード Call は省略できます。 キーワード Call を使って、引数が必要なプロシージャを呼び出す場合は、 引数リスト (引数 argumentlist) をかっこで囲む必要があります。 キーワード Call を省略するときは、引数リストを囲むかっこも省略しなければなりません。 -------------------------------------------------------- つまり、関数を単独で呼び出す場合、 Call MsgBox(引数1,引数2, ...) 又は MsgBox 引数1,引数2, ... の要に指定しなければいけません。 但し、引数が一つの場合、例えば MsgBox ( 引数 ) は構文エラーには、なりません。 実は、これは、 Call MsgBox( ( 引数 ) ) と同等と看做されるためです。 #なお、構文エラーにはなりませんが、 #引数がByRefの場合動作が違ってしまいます。 ちなみに、引数2つの場合 MsgBox ( 引数1 , 引数2) は Call MsgBox ( ( 引数1 , 引数2) ) と看做されてエラーになります。 MsgBox ( 引数1 ) , ( 引数2) なら、 Call MsgBox ( ( 引数1 ) , ( 引数2) ) と看做されます。
Option Explicit Public Function Function_Test(ByVal x As Integer) As Integer Debug.Print x Function_Test = Len(x) End Function このように戻り値を戻すタイプのプロシージャを関数(Function)と言います。 Private Sub Command1_Click() Dim L As Integer Function_Test 10 ' 1=戻り値を無視する場合の書き方1 Function_Test (10) ' 2=戻り値を無視する場合の書き方2 L = Function_Test(10) ' 3=戻り値を変数に代入する場合 Debug.Print Function_Test(10) ' 4=戻り値を出力する場合 End Sub 問題は、戻り値を変数に代入したり出力する場合です。 この場合、 関数名(引数) という書式でないとコードを記述した時、コンパイルした時のどちらかでエラーが発生します。 ()は、戻り値を何らかの形で利用する場合に求められる書き方と理解してよいと思います。 Private Sub Command2_Click() Dim L As Integer Debug.Print Function_Test; 10 L = Function_Test 10 End Sub つまり、MsgBox 関数は、戻り値を戻す機能を持つ FUNCTION だと言うことです。
- vvooo
- ベストアンサー率33% (3/9)
例 1) MsgBox "こんにちは" 2) MsgBox ("こんばんは") 3) If MsgBox("男性ですか?", vbYesNo) = vbYes Then ' '処理 ' End If 1と2はどちらでもエラーになりません。 3はカッコが無いとエラーになります。 問題は1,2の時ですが どちらが正しいかは、見解が分かれると思います。 因みに私は1を使用します。
- jim_kelly23
- ベストアンサー率44% (32/72)
通常、引数を使用するときに()をつけます。 文字だけを出す時は前者です。 例: A = msgbox("",vbYESNO) これでどっちのボタンを押したかを判断します。