• 締切済み

「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