VBAフォームモジュールでコマンドボタンのイベントが発生しない問題

このQ&Aのポイント
  • VBAフォームモジュールでコマンドボタンに「カード」(半角)というコントロール名を付けても、クリックイベントが発生しません。
  • Private Sub カード_Click()の部分にブレークポイントを設置しても、通過されません。
  • コントロール名を変えずに、VBAのフォームモジュールで「カード」(半角)とすると、自動的に全角に変換されてしまいます。この変換を止める方法はありますか?
回答を見る
  • ベストアンサー

フォームモジュール イベントが発動しない半角→全角

コマンドボタンのコントロール名に「カード」(←これは半角です)とつけて、クリックイベントのプロシージャーを紐づけようとしたら、 Private Sub カード_Click() End Sub になってしまい、そのコマンドボタンをクリックしてもイベントが発生しません。 Private Sub カード_Click()の部分にブレークポイントを設置しても、通過されません。 都合上全て半角でコントロール名をつけてしまったため、コントロール名を変えたくないのですが VBAのフォームモジュールで「カード」(←これは半角です)とすると、 勝手に全角になってしまうのですが、 この機能を止める方法はありますか?

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> この機能を止める方法はありますか? こちらの環境(Access2007/WinXP Home)で確認した限りでは、 止める方法はないようです。 ただ、半角カタカナのコントロールであっても、以下の方法でSub プロシージャを生成させた場合は、半角カタカナが維持されます。 ポイントは、  【プロシージャ名を手入力せず、コード ビルダに作成させる】 ことです。 1)当該イベントのコードを既に組んでいる場合は、Visual Basic  Editor(VBE)画面で、一時的にプロシージャ名を変更  (「Private Sub カード_Click()」→「Private Sub ★カード_Click()」) 2)当該フォームをデザインビューで開き、プロパティシートの当該  イベント欄にカーソルを移動 3)同イベント欄の右端に表示される「...」(ビルダ)ボタンをクリック 4)『ビルダの選択』ダイアログが開いた場合は、「コード ビルダ」を  選択して『OK』ボタンをクリック  *下記注記参照* 5)半角カタカナでSubプロシージャが生成されたのを確認したら、  必要なコードを記述  (手順「1」でコードが既存の場合は、中身をCut&Pasteして、  元のSubプロシージャは削除) ・・・以上です。 <注記> 既に設定されているかもしれませんが、イベント発生時の処理を 専らVBAで行う場合は、以下の設定を行うと、『ビルダの選択』 ダイアログの表示を省略できます: ((Access2007以降))  『Access のオプション』ダイアログで『オブジェクト デザイナー』を  選択し、『フォーム/レポート』領域の「常にイベント プロシージャ  を使用する(E)」のチェックをOnにする。  (上記ダイアログは、Access2007ではOfficeボタンのクリックで  表示されるメニューの最下方の『Access のオプション』ボタン、  Access2010では『ファイル』タブの最下方の『オプション』ボタン  から、それぞれ開けます) ((Access2003以前))  Accessのメニューで「ツール(T)→オプション(O)...」を選択して  『オプション』ダイアログを開き、『フォーム/レポート』タブ内にある  「常にイベント プロシージャを使用する(E)」のチェックをOnにする。 <余談> > コントロール名を変えたくないのですが もしも単純に手間の問題だけなら、改名処理の自動化コードを 作成して・・・と思ったのですが、「アルファベットや数字の半角/ 全角の混在の維持」と「濁音/半濁音の変換」の両立が面倒 だったので(汗)、今回は保留とさせて戴きました。 (「アルファベットや数字は半角に統一も可」といった前提があれば  濁音・半濁音の処理も簡素になるんですが)

vrizsbeknkczw
質問者

お礼

ありがとうございます。

関連するQ&A

  • 不要なイベントを削除したい

    フォームにコマンドボタン(名前:コマンド0)を置いて、 [イベント プロシージャ]にしてクリックするとVBE画面にプロシージャーが作成されますよね。 しかしそのコマンドボタンの名前を変更して(新しい名前:新コマンド0)、さっきと同じように [イベント プロシージャ]にしてクリックすると新たなプロシージャの型が作成されますよね。 Private Sub コマンド0_Click() End Sub Private Sub 新コマンド0_Click() End Sub こんなかんじで。 そんな事を一杯やり過ぎて、 Private Sub コマンド0_Click() End Sub の方がいっぱい余ってる?浮いてる?イベントに紐づいてない状態なのですが、 量が多すぎてどれが不要なプロシージャーなのかわからないのですが、 一気に削除する方法はありますか? 別にほっといても問題ないとは思うのですが、不要なものは削除したいです。

  • フォームを開く時のイベント処理

    Visual Basic 6.0 あるフォーム読込時イベント[Private Sub Form_Load()]で コマンドボタンにフォーカスを移動しようとしたら、エラーしてしましました。 Private Sub Form_Load() CommandButton.SetFocus ’プロシージャの呼び出し、または引数が不正です End Sub Form_Open や BeforeUpdate ? 開いた後にフォーカスをセット出来る イベント処理は無いでしょうか? ご教授願います。

  • 今発生しているイベントのコントロール名を取得

    エクセルです 例えば、シートにコマンドボタンを一つ設置して、クリックイベントで Private Sub CommandButton1_Click() MsgBox "CommandButton1が押されました" End Sub こうしたら、コマンドボタン1を押した時に、 "CommandButton1が押されました"が表示されますが、 CommandButton1の部分を変数みたいなのにすることはできますか? MsgBox Me.Name & "が押されました" だとシート名が取得されるし MsgBox Me.Control.Name & "が押されました" や MsgBox Me.ActionControl.Name & "が押されました" だとエラーになります。

  • 標準モジュールとイベントの質問

    初めて質問します。 ビジュアルベーシックで標準モジュールで ボタンのクリックイベントを実行したいのですが どうやってプログラムすればいいんでしょうか? 今の会社に入っていきなりVBの仕事させられて とっても困っています。 Private Sub Frm1Command1_Click() Call Module1.Frm1Command1_Click End Sub こんな書き方じゃなくて、標準モジュール内で Public Sub Command1_Click() MsgBox "sine" End Sub って書いて実行できるようにしなくてはダメなんです。 どうすればいいんでしょうか? もしかして無理なんでしょうか? これ、上司の嫌がらせだったらイヤですね・・・。

  • フォーム上の任意のコントロール上でのイベントをまとめてハンドリングする方法

    .NETにおいて、フォーム上に配置されたコントロールで発生したイベントを、各コントロールごとではなくて、まとめてハンドルする方法はないでしょうか。 例えば次のようなフォームがあります。 (Button1, Button2, Button3は、フォームに配置されたボタンとします) Public Class MyForm   Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click   End Sub End Class ボタンが3つ程度の場合はこれで良いと思うのですが、例えば(極端に言えば)ボタンが100個ある場合、 Handles Button1.Click, Button2.Click, (途中省略.....) Button100.Click と書くしかないのでしょうか。 後で対象コントロールが増えたり減ったりした場合に間違いが起こりそうなので、このような書き方は避けたいです。 フォーム上のどのコントロールでも構わないからとにかくクリックイベントが発生したことを知るための方法はないでしょうか。 例えば次のようなかんじでハンドリングできないでしょうか。 Private Sub All_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles フォーム上の任意のコントロールでのClickイベント End Sub (環境はVB.NET2005です)

  • Current、Openがそれぞれ2回発動する

    テーブルには適当なデータが入っています。 フォーム1を作り、コマンドボタンを1個だけ設置して、フォーム2を開くようにするために Private Sub コマンド0_Click() DoCmd.OpenForm Form_フォーム2.Name End Sub としました。 フォームはテーブルをレコードソースとしています。 フォーム2のモジュールに Private Sub Form_Current() Debug.Print "Form_Current" End Sub Private Sub Form_Open(Cancel As Integer) Debug.Print "Form_Open" End Sub としたのですが、結果は Form_Open Form_Current Form_Open Form_Current になります。 よって、二つのイベントの中にいくつかのプロシージャーが入っているのですが 2回ずつ実行されてしまい、求めている結果と異なってしまいます。 これを回避する方法はありますか? どうしてもフォーム1のコマンドボタンを押して、フォーム2をひらきたいのです。 よろしくお願いします。

  • エクセルVBAでフォームのボタンとコントロールツールボックスのコマンドボタン

    エクセルVBAでフォームのボタンとコントロールツールボックスのコマンドボタンについて教えてください。 実はこれまでフォームしか使ったことがないのですが、フォームのボタンですと、下記のように一つのプロシージャを多数のボタンから呼び出し、呼び出したボタンにより異なった指示が出来ます。 Sub test() x = Application.Caller Select Case x Case "ボタン 1" MsgBox 1 Case "ボタン 2" MsgBox 2 Case "ボタン 3" MsgBox 3 Case "ボタン 4" MsgBox 4 End Select End Sub コントロールツールボックスは Private Sub CommandButton1_Click() MsgBox 1 End Sub Private Sub CommandButton2_Click() MsgBox 2 End Sub のようにコマンドボタンごとにひとつずつ書くしかないのでしょうか?

  • VBA 標準モジュールとフォーム (続き)

    先ほど、同じ質問タイトルで質問させていただいたものです。この場合どうなりますか? モジュールでの変数file_nameをフォームのボタンをクリックしたら"text.xls"が表示されるようにしたいです。 (イメージとしては、エクセルのsheet1にコマンドボタンがあってクリックするとフォームが立ち上がってフォームのコマンドボタンをクリックすると"test.xls"が表示される) モジュール Private Sub CommandButton1_Click() ←エクセルsheet1にボタンがある   dim file_name as string file_name="test.xls"   UserForm1.Show End Sub フォーム(UserForm1) Sub CommandButton1_Click() ←フォームにボタンがある MsgBox file_name End Sub

  • クリックイベントなのに、2回クリックしないとフォー

    クリックイベントなのに、2回クリックしないとフォームが閉じないです。 フォームに閉じると言うコマンドボタンがあり、クリックイベントで Private Sub cmd_閉じる_Click() DoCmd.Close acForm, Me.Name End Sub としてるのですが、なぜか1回ボタンを押しただけではフォームが閉じません。 2回目押した時にフォームがとじます。 ダブルクリックでも閉じます。 Private Sub cmd_閉じる_Click() 'DoCmd.Close acForm, Form_Fフォーム.Name End Sub のように、フォーム名を指定すると1回のクリックで閉じます。 しかしMe.Nameだと2回目じゃないと閉じない理由がわかりません。 Fフォームは他フォームから DoCmd.OpenForm Form_Fフォーム.Name, acNormal で開いたから2回クリックしないと閉じないのでしょうか?

  • コマンドボタンのEnterイベント後に、フォーカスを移動したい。

    コマンドボタンのEnterイベント後に、フォーカスを移動したい。 フォームに「TextBox1」(TabIndex=0)「TextBox2」(TabIndex=1)「CommandButton1」(TabIndex=2)の3つのコントロールがある場合。 CommandButton1がクリックされた場合も、TextBox2からCommandButton1に、タブキーまたはエンターキーで、フォーカスが移った場合にも、同じ処理を行い、処理結果によってTextBox1やTextBox2にフォーカスを移したいと考えています。 以下のようなサンプルを作成しました。 Private Sub CommandButton1_Enter() CommandButton1_Click End Sub Private Sub CommandButton1_Click() MsgBox ("OK") TextBox2.SetFocus End Sub この場合、CommandButton1_Enterのイベントが起こった場合、CommandButton1_Click()のTextBox2.SetFocusは効きません。 (正確には、CommandButton1_Enterイベントが終わった時点で無効でしょうか。) Enterイベントは、フォーカスが移動する前に発生するため、このイベントが終わった後に、そもそもの動作に戻り、フォーカス移動が発生してしまうからなのだと思っております。 要は、コマンドボタンにタブキーやエンターキーでフォーカスしても、コマンドボタンをクリックしたのと同じ処理を行い、所定の位置にフォーカスを持っていきたいのですが、どのように行えば良いか、わからない状況です。 よろしくお願いいたします。

専門家に質問してみよう