ダブルクリックしたら全体を選択する方法をgooで調べていたら、
http://oshiete.goo.ne.jp/qa/4899232.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」は、「実行!」みたいな意味なのでしょうか?
ご回答よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
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
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さんの反転する時の処理が異なるのでしょうか??
私が理解していた範囲のものなので、自己責任にて検証/解釈してください。
Private Sub txt00_DblClick(Cancel As Integer)
Cancel = MsgBox("続行?", vbYesNo) <> vbYes
End Sub
---------------------------------------------------------
を実行して「はい」(Cancel = False)を押下みたところ
おっしゃる通り、選択部分が反転表示されました。
>今回、自分で反転範囲を指定したいので、
Accessさんに処理されては困るので
Cancel = True として戻します。
なるほど。なんとなくわかりました。
Cancel = True は
何かと役立ちそうですね。ありがとうございました。
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
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 複数条件のオートフィルタ(VBA) 2 2022/12/09 15:40
- Visual Basic(VBA) ExcelVBA ドロップボックスで月を選択するとそれ以降のデータが残るようにしたい。 3 2022/12/16 14:53
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
エクセルVBAで Cancel=Trueの使い方
Excel(エクセル)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
ユーザーフォームのSetFocusが働かない?
その他(プログラミング・Web制作)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
6
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
7
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
8
エクセルVBA ブックを閉じる前に確認メッセージを表示したい
Excel(エクセル)
-
9
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
10
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
11
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
12
エクセルvba (ByVal Target As Range)について
Excel(エクセル)
-
13
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
14
アクセスVBAのMe!と[ ]
Access(アクセス)
-
15
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
16
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
17
ExcelVBAでセルを編集状態にする方法
Excel(エクセル)
-
18
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
19
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
20
AccessのFormの設定で、開いた時に必ず最大化で表示する方法が分からず困っています
Access(アクセス)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB2005 DataGridView上でクリッ...
-
【C#】ラベルのダブルクリック...
-
エクセル アプリケーションの...
-
時間のかかる処理をレスポンス...
-
「Cancel = True」とはどういう...
-
ロック??
-
[CGI]ブラウザを閉じた時の動作
-
excelのタスクバーアイコンが・...
-
同一の検索値が複数存在する場...
-
左シングルクリックと左ダブル...
-
リンクをクリックしたのと同じ...
-
デジタル時計の時刻合わせの方...
-
マイページはどこを開くの
-
ウインドウを毎回同じ位置、大...
-
エクセルのシート上に別のシー...
-
エクセルVBAでフォームのListbo...
-
Javascript_submit()完了後に処...
-
一定時間おきにアラームやポッ...
-
VBの画面で、全ウィンドウを一...
-
スクリプトって、何ですか?ど...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別フォームから戻ったときのイ...
-
「Cancel = True」とはどういう...
-
VB2005 DataGridView上でクリッ...
-
excelのタスクバーアイコンが・...
-
処理終了後のに砂時計が、クリ...
-
エクセル アプリケーションの...
-
リンクをクリックしたのと同じ...
-
C++での連続した左クリックの禁...
-
Perlで数値(小数点、負の数、...
-
VB6.0のEnabledをfalseにしても...
-
別ページからのタブ切り替えの...
-
VBAでIEの「Web ページからのメ...
-
フォームの値を取得できません...
-
Perlの多重起動を禁止したい
-
VB6にて、バックグラウンド処理...
-
マウスオーバー時に効果音を鳴らす
-
VC++2010 エディットボックスに...
-
C# マウスオーバーの記述方法
-
vba IE操作で こういう事って...
-
実行中のOSを知るには?
おすすめ情報