• 締切済み

「Cancel = True」とはどういう意味でし

ダブルクリックしたら全体を選択する方法をgooで調べていたら、 http://okwave.jp/qa/q4899232.html に辿りつきました。 Private Sub txt00_DblClick(Cancel As Integer)   Me.txt00.SelStart = 0   Me.txt00.SelLength = Len(Me.txt00.Text)   Cancel = True End Sub で、やりたいことが行えたのですが、一つ疑問があります。 Cancel = True はどういう意味なのでしょうか? 試しに、Cancel = Trueの部分をコメントアウトしてみたら、 テキストボックスが選択状態になりませんでした。 ということは、「Cancel = True」は、「実行!」みたいな意味なのでしょうか? ご回答よろしくお願いします。

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

#1です。すみません、どうせ同じだろうとExcelのVBAのヘルプで調べていました。Access2010のヘルプには、 >Cancel 必須 整数型 (Integer) DblClick イベントを発生させるかどうかを設定します。引数 Cancel を True (-1) に設定すると、DblClick イベントが取り消されます。 とあり、Excel VBAの記述と異なっておりました。 なお、DblClickで検索してみて下さい。候補のなかから、TextBox.DblClick イベントの所をご覧下さい。(但し、どのコントロールを選んでみても同じ記述かも) 既成の帳票フォームに置いた非連結のテキストボックスで試してみましたが、Excelのテキストボックスと若干挙動が違いますね。遅い2010のせいか、Cancel=Trueを入れないと、一瞬全選択されたものが、元に戻るのが見える気がします。 試したコードは下記の通りです。テキストボックスはつけてあった名前そのままです。 なおCancel = True は、どの位置に書いても効果は同じ様です。ご参考まで。 Private Sub タイトルtextbox_DblClick(Cancel As Integer) Cancel = True Me.タイトルtextbox.SelStart = 0 Me.タイトルtextbox.SelLength = Len(Me.タイトルtextbox.Text) ' Cancel = True End Sub

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

テキストボックス「txt00」があるとします。 VBAで以下を記述します。 Private Sub txt00_DblClick(Cancel As Integer)   Cancel = MsgBox("続行?", vbYesNo) <> vbYes End Sub 「はい」をクリックすると Cancel = False を 「いいえ」をクリックすると Cancel = True を設定して戻るだけです。 テキストボックスに「ABCD EFG.HIJ」と入力し、各文字の上でダブルクリックしてみます。 「はい」とすると、クリックした部分が反転表示されると思います。 「いいえ」なら反転する部分は、ないと思います。 Accessさんが反転処理するのは Cancel = False で戻った後だと推測できます。 ヘルプにもそれらしいことが書いてますね。 元々は、Cancel = False となっているようです。 今回、自分で反転範囲を指定したいので、(Accessさんに処理されては困るので) Cancel = True として戻します。 以下の記述に変更して、同じように確認してみてください。 Private Sub txt00_DblClick(Cancel As Integer)   Me.txt00.SelStart = 0   Me.txt00.SelLength = Len(Me.txt00.Text)   Cancel = MsgBox("続行?", vbYesNo) <> vbYes End Sub 「いいえ」なら全選択(全反転) 「はい」ならAccessさんが処理した反転になると思います。 なので > 「Cancel = True」は、「実行!」みたいな意味なのでしょうか? ではなく、「Accessさん、処理するな」とでも言った方が良いのでしょうか。 Accessさんの後の処理は Cancel しますよ( True ) なお、Private Sub txt00_DblClick(Cancel As Integer) の引数 Cancel に ByVal 記述がないのは、 設定した値をAccessさんに見てもらいためだと思います。 余談) ※ テキストボックスの DblClick を、反転させたい処理ではなく、 ・フォームを起動する等のためにイベントを使用したい場合、 Cancel = True は記述しておいた方が良いみたいです。 Accessのバージョンによっては、起動したフォームが裏に隠れるとかあるようです。 Cancel = True を指定することで回避できたという事もあるようです。 Accessさんの反転する時の処理が異なるのでしょうか?? 私が理解していた範囲のものなので、自己責任にて検証/解釈してください。

iuy65ghj8
質問者

お礼

Private Sub txt00_DblClick(Cancel As Integer)   Cancel = MsgBox("続行?", vbYesNo) <> vbYes End Sub --------------------------------------------------------- を実行して「はい」(Cancel = False)を押下みたところ おっしゃる通り、選択部分が反転表示されました。 >今回、自分で反転範囲を指定したいので、 Accessさんに処理されては困るので Cancel = True として戻します。 なるほど。なんとなくわかりました。 Cancel = True は 何かと役立ちそうですね。ありがとうございました。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

以前からちょっと気になっていた表現だったので調べてみました(といってもVBAのヘルプですが) >Cancel 必ず指定します。イベントのステータスを指定します。偽 (False) を指定すると、コントロールがイベントを処理します (既定値)。真 (True) を指定すると、アプリケーションがイベントを処理します。 ここで、アプリケーションというのはVBAのコードで制御しようとする事を言うのでしょうね。VBAのイベントコードを書かなくてもコントロールはWindowsのイベント処理をしている訳で、Cancel=Trueを指定すると、それをキャンセルするという事でしょうか。 当方の試験では、下記コードで何度かWクリックしていると、何かのタイミングで、テキストの全選択が働く事があります。この記述がなければその様な事は起こりません。したがって、VBAコードによる全選択を、コントロール本来のイベント処理が打ち消してしまうので、Cancel=Trueを指定して、それを防いでいると考えれば良いかも... Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Me.TextBox1.SelStart = 0 Me.TextBox1.SelLength = Len(Me.TextBox1.Text) End Sub

iuy65ghj8
質問者

お礼

Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Me.TextBox1.SelStart = 0 Me.TextBox1.SelLength = Len(Me.TextBox1.Text) End Sub に変えて検証してみましたが 「イベント プロパティに指定した式 ダブルクリック時 でエラーが発生しました ユーザ定義型は定義されていません」 となってしまいます。 ちなみに私もVBAのヘルプで調べたいのですが どうやってしらべればいいでしょうか? VBE画面でF1を押して「Cancel」と入れて押下すると 67件ヒットしてしまいました。 でもmitarashi様が提示していただいたヘルプの内容によると False→コントロールがイベントを処理します (既定値)。 True→アプリケーションがイベントを処理します。 との事ですね。 ありがとうございました。大変参考になりました。

関連するQ&A

  • コピー時のエラー表示を変更したい

    コードビルダ選択時での基礎知識が不足しています。ご面倒をお掛けしますが、宜しくお願いします。 テキストボックスのデータをコピーする際の方法として、イベントの「ダブルクリック」で「コードビルダ」を選択して下記を記述しています。うっかりデータがないテキストボックスをダブルクリックした時にでるエラー表示を「データがありません」に変更したいと思っています。ご指導をお願いします。 Private Sub 用例_DblClick(Cancel As Integer) Me!用例.SelStart = 0 Me!用例.SelLength = Len(Me!用例.Text) DoCmd.RunCommand acCmdCopy End Sub 以上、宜しくお願いします。

  • テキストの文字列を全て選択状態にしたい

    アクセス2003です。よろしくお願い致します。 テキストをダブルクリックすると そのテキストの文字列を全て選択状態にしたいのですが どうすればいいでしょうか? Private Sub テキスト0_DblClick(Cancel As Integer) End Sub の中に何を入れればいいのかわかりません。 イメージとしては画像のような感じです。 よろしくお願い致します。

  • ACCESS VBA 判定に利用できる情報について

    下のようなテストプログラムを作ってみました。 サブルーチン chgcolorの中で、どちらの上位ルーチンからコールされたか で処理を切り替えたいと考えています。上位ルーチンからの引数を増やす ことなく、判定する方法はないものでしょうか。  アドバイスお願いします。 Private Sub txt1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Call chgcolor(Me.txt1) End Sub  : Private Sub txt1_DblClick(Cancel As Integer) Call chgcolor(Me.txt1) End Sub  : Sub chgcolor(a As Control) ◇txt1_MouseDownからコールされた場合(またはクリックイベントの場合) →a.BackColor = CLng("&HFF00FF") ◇txt1_DblClickからコールされた場合(またはダブルクリックイベントの場合) →a.BackColor = CLng("&HFFFFFF") End Sub

  • データシートフォームでのSellength

    Access2010 データシートフォームの先頭のタブ位置(タブストップ0)に フォーカス時に全選択状態にしたいテキストボックスがあり、 Private Sub テキスト_Enter() Me!テキスト.SelStart = 0 Me!テキスト.SelLength = Nz(Len(Me!テキスト.Text)) End Sub のモジュールを入力しています。 普段はモジュール通りに機能するのですが、一つ前のレコードの最後のタブからEnterを押して レコード移動後このテキストボックスにフォーカスが移った場合に限り、全選択にならない事があります。 (このフォームではレコード移動時のモジュールは使用していません) ブレークポイントを入れて途中確認したところ内部上ではSelLengthの値は文字数通りになっているのですが、実際の画面ではおかしいままなので余計に分かりません 一応SendKeys "{F2}"に置き換えると全選択になったのでこれでやり過ごしているのですがどうすれば元のモジュールで正しく動いてもらえるのでしょうか?

  • 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の時は、何かの値を渡しているのですか?

  • アクセス コントロール名が変わった

    テキストボックスのコントロール名は「2013年」なのに、 そのコントロールをダブルクリックしてイベントプロシージャーを作ったら Private Sub Ctl2013年_DblClick(Cancel As Integer) End Sub になったのですが、なぜCtlが付いてしまったのでしょうか? 「2013年」というコントロール名はやめたほうがいいですか?

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

    アクセス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 テキストボックスを選択状態にしたい

    Access2003 VBA で開発しています。初心者です。 テキストボックスに入力した値が、不正な値の場合、 次のオブジェクトに移動せずに、その値を選択状態にしたいのですが、 やり方が分かりません。 txtコード.SetFocus txtコード.SelStart = 0 txtコード.SelLength = Len(txtコード.Value) としてもうまくいきません。 初歩的な質問ですが、解決法をご教授いただければ幸いです。 よろしくお願いいたします。

  • Nullの使い方が不正です。

    いつもお世話になっております。 VBAを独学で勉強している者です。 請求処理メニューを作っている最中なのですが、取引先マスターを入力していくフォームの入力値にいくつか機能を持たせることにしました。 取引先コードは10桁文字数で管理されるという設定なので10桁以外で入力した際は、BeforeUpdateイベントでエラーが出るようにし、重複した数値が入力した際もBeforeUpdateイベントでエラーが出るようにしたいのですが、実行してみると【実行時エラー’94 Nullの使い方が不正です。】となります。下記は作成途中のプログラムをコピペしたものです。 ▲がついている部分が黄色く反転しています。 参考書を元に作成していったのですが、エラーがでる原因がわからないためアドバイスをいただきたいです☆  Private Sub 取引先コード_BeforeUpdate(Cancel As Integer) Dim length As Long 'len関数の戻り値  Dim ret As String 'DLookup関数の戻り値。   length = Len(Me!取引先コード) If length <> 10 Then MsgBox "取引先コードは10桁の数値でなければなりません", vbOKOnly + vbInformation, "入力値エラー" Cancel = True Me!取引先コード.SelStart = 0 Me!取引先コード.SelLength = Len(Me!取引先コード) End If ▲ret = DLookup("取引先コード", "取引先マスターT", "取引先コード='" & Me!取引先コード & "'") '重複のチェック If IsNull(ret) Then Exit Sub Else MsgBox Me!取引先コード & " は登録済みです", vbCritical + vbOKOnly, "入力値エラー" Cancel = True Me!取引先コード.SelStart = 0 Me!取引先コード.SelLength = Len(Me!取引先コード) End If End Sub 宜しくお願いいたします。

  • VB2005 のイベントについて

    いつもお世話になっています。 OS:Windows 2000 言語:VB2005 Express Edition で作成しているのですが、イベントの質問があります。 TextBoxのフォーカスを取得した時に、 そのTextBoxに設定されている文字列を選択させようと思い TextBoxのEnterイベントでSelectAllをしているのですが、 この場合ですと、マウスでクリック選択した時には文字列が選択されません。 Private Sub txt_id_Enter(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles txt_id.Enter txt_id.SelectAll() End Sub VB6.0 では Private Sub txt_id_GotFocus txt_id.SelStart = 0 txt_id.SelLength = Len(ob_Textbox.Text) End Sub 上記の通り、GotFocusイベントを使用しており、Tabキーでフォーカス取得していた時も マウスで選択している時も変わらず文字列は選択されていました。 VB2005のGotFocusイベントでは、一旦選択されるのですが すぐに選択は解除されてしまうのです。 他にVB6.0のGotFocusと同等のイベントや、対応策などありませんでしょうか? よろしくおねがいいたします。

専門家に質問してみよう