13

プログラミング初心者でエクセルでVBAを学び始めたばかりです。私はこのウェブサイトに出くわし、ここで例を実行しましたが、このコードについて質問があります:

変数は「Dim」ステートメントを使用して宣言されていることを知っています。ここで「メッセージ」は、データ型が整数の変数です。私がはっきりと理解していないのは; ここでの「6」と「7」の意味は何ですか。私は彼らがどこかから来ると信じています。しかし、このプログラムを学び始めたばかりなので、まったくわかりません。どうやって「6」と「7」になるのか教えてください。ここに何らかの根拠があると思います

Private Sub CommandButton1_Click()
Dim message As Integer
message = MsgBox("Click Yes to Proceed, No to stop", vbYesNoCancel, "Login")
If message = 6 Then
Range("A1").Value = "You may proceed"
ActiveWorkbook.Activate 
ElseIf message = 7 Then
ActiveWorkbook.Close
End If

End Sub

ご協力ありがとうございました:-)

=======

答えてくれてありがとう、彼らはとても役に立ちます。はい、このスレッドはすでにスーパーユーザー サイトに投稿されています。この質問はここに属すべきだと知らされたので、スーパーユーザーからスタックオーバーフローに自動的に行われることを読んだ後、ここに投稿しました。

もう一度ありがとう

4

8 に答える 8

24

MsgBoxEnum(eration)は呼び出された を返しますMsgBoxResult。これは基本的に、「ラベル」が付いた数値以外のものではありません。この場合の 6 と 7 は、この列挙型のメンバーであり、回答YesとにマップされますNo

定数や列挙型の代わりにいわゆる「マジック ナンバー」を使用することは、可能な限り避けるべきです。

基本的に、コードを次のように書き換えることができます。

Dim message As Integer
message = MsgBox("Click Yes to Proceed, No to stop", vbYesNoCancel, "Login")
If message = MsgBoxResult.Yes Then
    Range("A1").Value = "You may proceed"
    ActiveWorkbook.Activate
ElseIf message = MsgBoxResult.No Then
    ActiveWorkbook.Close
End If

列挙型が vbMsgBoxResult などと呼ばれている可能性があります...これを確認するための Office はありません。Visual Studio だけです。

私たちがそれに取り組んでいる間...これは理解しやすいかもしれません:

Select Case MsgBox("Click Yes to Proceed, No to stop", vbYesNoCancel, "Login")
    Case MsgBoxResult.Yes
        Range("A1").Value = "You may proceed"
        ActiveWorkbook.Activate

    Case MsgBoxResult.No
        ActiveWorkbook.Close

    Case MsgBoxResult.Cancel
        ' he clicked cancel '

End Select
于 2009-11-18T14:30:17.940 に答える
9

私が最初にMsgBox回答を始めたとき、私はほとんどの場合、回答を として宣言しましたInteger。ただし、最善の方法は、message変数を として宣言することですVbMsgBoxResult。これは、利用可能な回答を常に表示する列挙型です。下の図では、IDE (例: Visual Basic for Application エディタ) は で利用可能なオプションを表示しますVbMsgBoxResult

VbMsgBoxResult

Enumeration 内のすべての変数 ( 、、など) は実際には整数に解決されるため、変数を として格納できます。ただし、これらの変数を参照するたびに、それらの変数の整数値が何であるかを把握する必要があります。私の意見では、利用可能な回答を実際に確認できるように、回答を保存することをお勧めします。answerIntegervbAbortvbYesvbOKVbMsgBoxResult

于 2009-11-20T13:01:14.563 に答える
8

非常によく書かれていないコードです。"6" と "7" は定数 "vbYes" と "vbNo" の値で、ユーザーがダイアログで [はい] または [いいえ] をクリックしたときに返されます。

参考:http ://www.techonthenet.com/access/constants/msgbox_ret.php

コードは言うべきです

If message = Constants.vbYes 

それ以外の

If message = 6

何が起こっているのかが明確になるように。

于 2009-11-18T14:52:33.040 に答える
7

このリンクは VBScript 用ですが、リターン コードは同じである必要があると思います: MsgBox Function Reference

リターン コードは、どのボタンがクリックされたかを示します。

1   OK
2   Cancel
3   Abort
4   Retry
5   Ignore
6   Yes
7   No
于 2009-11-18T14:53:20.693 に答える
5

6 と 7 は、特別な意味を持つハードコードされた値です。'MsgBox("Click Yes...")' 呼び出しは、ユーザーがメッセージ ボックスで何をしたかをコードで判断できるようにする数値を返します。その後、条件 (IF ステートメント) を使用して次に何をするかを決定できます。

これらの特別な値の完全なリストは、次の MSDN ドキュメントに記載されています。

http://msdn.microsoft.com/en-us/library/139z2azd(VS.80).aspx

于 2009-11-18T14:31:30.217 に答える
5

これらは MsgBox() からの戻り値です。作成者は、プログラムを読みやすくするために、代わりに記号値を使用する必要がありました。

vbYes   6
vbNo    7

詳細については、このMSDN の記事を参照してください

于 2009-11-18T14:51:57.677 に答える
5

6 と 7 は、MsgBox メソッドからの戻りコードです。基本的に、MsgBox が呼び出されると、"はい"、"いいえ"、または "キャンセル" のいずれかをクリックしたユーザーにメッセージ ボックスが表示されます。ユーザーの選択は、MsgBox メソッドから数値として返されます。6 ははい、7 はいいえです。

これらの数値をコードで直接使用するのではなく、それらを表す Microsoft 提供の定数を使用することをお勧めします。コードは次のように書き直すことができます。

Private Sub CommandButton1_Click()
    Dim message As Integer
    message = MsgBox("Click Yes to Proceed, No to stop", vbYesNoCancel, "Login")
    If message = vbYes Then
        Range("A1").Value = "You may proceed"
        ActiveWorkbook.Activate 
    ElseIf message = vbNo Then
        ActiveWorkbook.Close
    ElseIf message = vbCancel Then
        'Do nothing.
    End If
End Sub
于 2009-11-18T14:52:32.410 に答える
3

同等のものに書き換えるだけです:

Private Sub CommandButton1_Click()
  Dim optionSelected As VbMsgBoxResult
  optionSelected = MsgBox("Click Yes to Proceed, No to stop", vbYesNoCancel, "Login")
  If optionSelected = vbYes Then
    Range("A1").Value = "You may proceed"
    ActiveWorkbook.Activate 
  ElseIf optionSelected = vbNo Then
    ActiveWorkbook.Close
  End If
End Sub

そして先に進む

于 2009-11-25T09:05:58.703 に答える