ユーザーフォームのDblClickイベントとByVal Cancelの意味

このQ&Aのポイント
  • エクセルのユーザーフォームでDblClickイベントが発生した場合、ByVal Cancel As MSForms.ReturnBoolean内に渡された値の意味を教えてください。
  • DblClickイベントは、ユーザーフォームがダブルクリックされたときに発生します。このイベントが発生すると、CancelパラメータにはMSForms.ReturnBoolean型の値が渡されます。
  • ByValは値渡しを意味し、CancelパラメータがDblClickイベントハンドラに渡されるときに、値がコピーされます。この場合、MSForms.ReturnBoolean型のパラメータCancelは、ユーザーフォームがダブルクリックされた時に生成されるダブルクリックイベントをキャンセルするかどうかを示す真偽値を持っています。
回答を見る
  • ベストアンサー

ByVal Cancel As MSForms.R

(ByVal Cancel As MSForms.ReturnBoolean)の意味を教えてください。 エクセルのユーザーフォームで、 クリックした場合は、フォームモジュールに Private Sub UserForm_Click() End Sub のひな形が出来て、 ダブルクリックした時は Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean) End Sub が出来上がります。 なぜ、DblClickの時はカッコの中に色々入るのでしょうか? それにByValは値渡しの時に使う言葉ですよね? DblClickの時は、何かの値を渡しているのですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • freetaka
  • ベストアンサー率53% (106/197)
回答No.1

通常の引数の仕組みとして参照渡しと値渡しを理解しているうえで 引数にもクラスオブジェクトがあることを理解していないと なかなか難しい話しになります http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips01.htm 参考までに上記リンクにその仕組みが書かれているので 熟読してみてください

YGOGXGCGHH
質問者

お礼

実は参照渡しと値渡しもあまり理解してないのです。 まずそこから始めてみたいと思います。 でも、やはり値渡しは関係あるようですね。 リンクありがとうございます。

関連するQ&A

  • EXCEL VBA フォームコード簡素化

    EXCEL VBAのフォームにテキストボックスを複数作成しております。 下記のように複数のテキストボックスで同じ処理を行うのですが コントロール→ループか何かで簡素化できないでしょうか? Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox17.Value = Format(TextBox17.Value, "0.00") End Sub Private Sub TextBox18_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox18.Value = Format(TextBox18.Value, "0.00") End Sub Private Sub TextBox19_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox19.Value = Format(TextBox19.Value, "0.00") End Sub Private Sub TextBox20_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox20.Value = Format(TextBox20.Value, "0.00") End Sub Private Sub TextBox21_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox21.Value = Format(TextBox21.Value, "0.00") End Sub Private Sub TextBox22_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox22.Value = Format(TextBox22.Value, "0.00") End Sub 以上お力添えお願いいたします。

  • リストボックス

    すいません以下の処理に困っております。 リストボックスで値を取得して他のリストボックスにその値を 出力したいのですがまったくできません。 <例> リストボックス1 a b c リストボックス2(上で選択した値を出力) a ちなみに構文は、 ------------------------------------------------------------ Private Sub btn選択_Click() ListBox2.Text = ListBox1.Text 'ListBox1.ListIndex + 1 & ": " & ListBox1.Text End Sub Private Sub CommandButton1_Click() End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) btn選択_Click End Sub Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean) btn選択_Click End Sub Private Sub UserForm_Initialize() With ListBox1 .AddItem "スケジューラ" .AddItem "データ変換" .AddItem "DWH Server" .AddItem "PPP Server" .AddItem "ファイヤーウォール" .AddItem "暗号オプション" End With End Sub ---------------------------------------------------- 初心者でまったくできません。 御教授をお願いします。

  • UserFormから標準モジュールのIEを制御

    VBAで、標準モジュールにて呼び出したIEオブジェクトをUserForm上から 制御する方法があればご教授願います。 Sub SampleModule() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp" UserForm1.Show ~~~~~~~~~~ Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Module1.SampleModule.objIE.Navigate "http://www.google.co.jp" ↑こういう感じの解をイメージしてます。 End Sub つまり、標準モジュールでセットしたオブジェクトを、呼び出した フォーム上から参照したいわけです。宜しくお願いします。

  • テキストボックス内の簡単な計算

    はじめまして、よろしくお願いいたします。 エクセル(2003)のマクロで質問です。 いくつか複数のテキストボックスが配置されています。 加算など簡単な計算をテキストボックス内で計算させていおいて、 最終的にボタンで、それら各々のテキストボックスに対応させた エクセルのシートのセルに代入させようとしています。 さて、テキストボックス内で簡単な計算をさせるため、 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox1.Text = Evaluate(TextBox1.Text) End Sub Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox2.Text = Evaluate(TextBox2.Text) End Sub Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox3.Text = Evaluate(TextBox3.Text) End Sub … とさせましたが、 何も入力がないテキストボックスは そのままなにもしなくていいよ、とさせたいですのですが、 上記のままだと、何もない(値が入力されていない) テキストボックスに到達すると 止まります。 何も入力がないテキストボックスは 何もしなくていいよ、は どうしたらよいでしょうか? 誠に不勉強で恐縮ですが ご教授願います。

  • エクセルVBAについて質問です。

    エクセルVBAについて質問です。 ユーザーフォームのテキストボックスに数字以外を入力するとエラーメッセージが出るように関数を作ったのですが、 Private Function AA(objtextbox As MSForms.TextBox) As Boolean Dim A As String AA = False A = Trim(objtextbox.Text) If objtextbox.Text <> "" Then If IsNumeric(A) = False Then MsgBox "数値 Error", vbCritical With objtextbox .SetFocus .SelStart = 0 .SelLength = Len(.Value) End With AA = True End If End If End Function Private Sub textbox1_exit(ByVal cancel As MSForms.ReturnBoolean) cancel = AA(TextBox1) End Sub テキストボックス200近くある場合、1つ1つに Private Sub textbox1_exit(ByVal cancel As MSForms.ReturnBoolean) cancel = AA(TextBox1) End Sub と作っていかなくてはいけないのでしょうか? プロシージャ名に変数使おうとしたら上手くできませんでした。 どなたか助けてください。

  • ExcelのVBAについてです。

    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) UserForm1.Show End Sub というコードで、シート上で右クリックしたら、ユーザーフォームを表示するようにしたんですが、ユーザーフォームを閉じると右クリックメニューが出てきます。これを出なくするにはどのようにしたらいいのでしょうか。教えてください。よろしくお願いします。

  • エクセルVBA イベントプロシージャに引数を渡せま

    お世話になります。 エクセル2003/XP 使用です。 イベントプロシージャに引数を渡せまるかどうか教えていただけますでしょうか? 下記のコード中の変数mysheetnameを ユーザーフォーム、→ CommandButton1のプロシージャに 引数として渡して行きたいのですが、 実行すると、一番最初のWorkbook_SheetBeforeRightClickの時点で、 コンパイルエラー:  プロシージャの宣言が、イベントまたはプロシージャの定義と一致していません。 とエラー表示されます。 イベントプロシージャに引数を渡すことはできますでしょうか? ---------- ThisWorkBook内 ---------- Public mysheetname As String Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) mysheetname = ActiveSheet.Name UserForm1.Show (mysheetname)     '←変数mysheetnameの値をユーザーフォームに渡したい。 End Sub ---------- ユーザーフォーム ---------- Private Sub UserForm_Initialize(ByVal mysheetname As String ) 処理 End Sub Private Sub CommandButton1_Click(ByVal mysheetname As String ) 処理 End Sub ’--------- ここまで 引数について少し理解し始めたばかりの者です。 よろしくお願いします。

  • Excel VBAでフォーカスを移動しない方法

    Excel VBA リストのソースを設定してあるコンボボックスから次のコンボボックスに移動する際、入力にエラーあれば フォーカスを移動しないようにするコードはどのようにすればいいのですか? 現在は Private Sub [コンボボックス名1]_Exit(ByVal Cancel As MSForms.ReturnBoolean) If [コンボボックス名2] = "" Then MsgBox "値が不正です。", vbInformation, "フォーム名" End If End Sub としています。

  • リストのダブルクリックイベントをフォーム起動時に発

    アクセス2010です。 Private Sub Form_Load() Call lst_test_DblClick End Sub Private Sub lst_test_DblClick(Cancel As Integer) MsgBox "" End Sub このような事は出来ないのでしょうか? リストのダブルクリックイベントをフォーム起動時に発動したいのですが このコードを書くと Call lst_test_DblClick の部分で引数を省略できません。 になります。 どちらもフォームモジュールに書いています。

  • エクセルVBA 時刻の計算 テキストボックス

    お知恵をお貸しください。 入力を簡単にするためのユーザーフォームを作っています。 開始時間(txt開始)に「14:00」 終了時間(txt終了)に「19:00」と入力すると 時間(txt時間)は「5:00」(19:00-14:00=5:00) 通常(8:00~18..00)に「4」(4:00*24) 時間外(6:00~8:00、18:00~22:00)に「1」(1:00*24) 深夜(22:00~6:00) と表示させたく思います。 通常、時間外、深夜のテキストボックスに表示することができません。 よろしくお願いします。 Private Sub txt時間_Exit(ByVal Cancel As MSForms.ReturnBoolean) If txt開始 > TimeValue("8:00") And txt開始 < TimeValue("18:00") Then txt通常.Text = TimeValue(txt時間.Value) * 24 End If End Sub Private Sub txt終了_Exit(ByVal Cancel As MSForms.ReturnBoolean) txt時間.Value = Format((TimeValue(txt終了.Text) - TimeValue(txt開始.Text)), "h:mm") End Sub