MS Access Tips/Sample and VBA and Blog customize etc...

VBAでフォーム上のすべてのコントロールを使用不可にする

コマンドボタンのクリック時にフォーム上のすべてのコントロールを使用不可にしたいのですが、「コントロールがフォーカスを取得しているときは、コントロールを無効にすることはできません。」とエラーが出て、クリックしたコマンドボタンを使用不可にできません。

フォーカスがあるコントロールは使用不可にできません。使用不可というのは、フォーカスがとれないようにすることなので、当然の仕様です。

ダミーのコントロールを配置しておくという手が考えられます。コマンドボタンの「透明」プロパティを「はい」にしてそれをダミーにすると目立ちません。

しかし、ダミーのコントロールを配置せずに可能にする方法もあります。

難易度:

まずはダミーのコントロールを配置する方法から。

コマンドボタンを配置して下記のように設定します。別のコントロールの背面に隠しておくと完璧です。

プロパティ 設定値
名前 cmdDummy
0.1cm
高さ 0.1cm
透明 はい
タブストップ いいえ
Private Sub コマンド0_Click()
Dim ctl As Control
    Me.コマンド3.SetFocus
    For Each ctl In Me.Controls
        If ctl.Name <> "cmdDummy" Then ctl.Enabled = False
    Next
End Sub

コマンド0 をクリックすると、コマンド0 を含めてフォーム上のすべてのコントロールが使用不可になります(cmdDummyは除く)。

さて、本題のダミーのコントロールも配置せずル可能にする方法。

フォーム上のすべてのコントロールからフォーカスをなくすことが出来ればいいのです。フォーム自体にフォーカスを与える、つまり、レコード選択の状態にすればいいわけです。

Private Sub コマンド0_Click()
Dim ctl As Control
    DoCmd.RunCommand acCmdSelectRecord
    For Each ctl In Me.Controls
        ctl.Enabled = False
    Next
End Sub

レコードセレクタが表示されていると、それが反転表示されますので、フォームの「レコードセレクタ」プロパティは「いいえ」にしておくといいでしょう。


拍手する

1 Comments

名無し says...""

素晴らしいです
非常に助かりました
ありがとうございます

2011.10.04 12:41 | URL | #- [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/218-a53cebb2
該当の記事は見つかりませんでした。