Microsoft Access 掲示板

データシートで行の複数選択・一覧の全体選択・列選択を禁止させたい

7 コメント
views
4 フォロー

詰まっています。どうかご教授お願いできませんでしょうか

読み込んだテーブルデータを一覧に表示しており、
指定項目をクリックすることで詳細画面に飛ぶような画面を作成しています。
そのデータシートの一覧上にて、件名の通り3つの機能をそれぞれ禁止させたいのです
 ① 行選択は単一のみ可能とし、複数選択させない
 ② データシートの左上をクリックすることでデータシート全体が選択されるのを禁止したい
 ③ 項目名をクリックすることで列全体が選択されるが、禁止したい

どうか、よろしくお願い致します。

頭痛胃痛
作成: 2022/05/30 (月) 21:31:44
通報 ...
1
りんご 2022/05/31 (火) 02:11:45 c564b@0e907

 残念ながら禁止は出来ませんでした。禁止選択するんだけどやっぱり駄目だから直ぐにセルに移動しました、という感じです。

データシートビュー

列名1列名2
セルセル
セルセル

フォームのイベント:マウスボタン解放時。

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If X<= 270 Then
SendKeys “{LEFT}”
End If
If X > 270 And Y<= 240 Then
SendKeys “^ “
End If
2
hiroton 2022/05/31 (火) 08:13:21 b7f78@f966d

データシートの利点を禁止したいなら帳票フォームで作ればいいのでは?

3

私も帳票フォームにすることを推奨しますが、データシートでということなら、下記でどうでしょう。

禁止自体は難しそうなので、マウスアップ時に複数行選択していたら、すぐに1行選択にするというコードです。

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Me.SelHeight > 1 Then
        DoCmd.RunCommand acCmdSelectRecord
    End If
End Sub
4
頭痛胃痛 2022/05/31 (火) 15:05:52 dc988@76275

まことにありがとうございます。
マウスアップによる対応でうまくいけました。

再度申し訳ありません。
もう1点助言いただけないでしょうか。
「Shitft+矢印キーでの範囲選択も防止しさせたい」のですが、これはどこのどの条件とすればよいのでしょうか

データシートはサブフォームになっているため、
アドバイス頂いたマウスアップ同様、サブフォームのキークリック時を追加し、
シフトを入力対象から除外すれば行けるのではとも考えたのですが、
そもそもキークリックイベントが発生してくれず、頓挫しました。

どうかよろしくお願いいたします。

5
りんご 2022/05/31 (火) 15:54:04 c564b@0e907

サブフォームのフィールドそれぞれに、キー解放時

Private Sub ほにゃらら_KeyUp(KeyCode As Integer, Shift As Integer)
If (Shift And acShiftMask) > p Then
Me.ActiveControl.SetFocus
End If
End Sub
6
りんご 2022/05/31 (火) 16:06:50 c564b@0e907

>> 5
もしくは、サブフォームのプロパティシートでフォームを選択して、イベントタブのキーボードイベント取得を「いいえ」から「はい」に変更すれば、(サブ)フォームのキー解放時イベントであれこれできるのかも。試してないけど。

7

フォームの「キーボードイベント取得」を「はい」に設定。
フォームのキークリック時のイベントプロシージャに下記を記述。

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If (Shift And acShiftMask) > 0 Then
        Select Case KeyCode
        Case vbKeyLeft To vbKeyDown
            KeyCode = 0
        End Select
    End If
End Sub