#673 列全体が範囲選択されているかどうかを調べるには? フォーム、VBA

データシート形式のサブフォームにおいて、”列全体が範囲選択”されているかどうかを調べる方法です。

下記の例では、フォームにおいてF4キーを押したとき、その判断を行い、列が範囲選択されていたらその開始列の番号と選択列数をメッセージボックスに表示しています。

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'フォームのキークリック時

  If KeyCode = vbKeyF4 Then
    If Me.SelTop = 1 And Me.SelHeight >= Me.Recordset.RecordCount Then
      MsgBox "列が範囲選択されています! " & vbCrLf & vbCrLf & _
              "選択開始列は " & Me.SelLeft & vbCrLf & vbCrLf & _
              "選択列数は " & Me.SelWidth, _
              vbOKOnly + vbInformation
    End If
  End If

End Sub

※このイベントを使うためにはフォームの「キーボードイベント取得」プロパティを「はい」に設定しておく必要があります。


ここでの要点は次の通りです。
  • 「Form_KeyDown」イベントプロシージャの「KeyCode」引数を調べることで、F4キーが押されたかどうかは判別し、F4キーが押されたときだけ処理を行います。
  • そのフォームの「SelTop」プロパティの値から範囲選択の「開始行」を取得します。
    ”列全体が範囲選択”されている場合は1行目からが選択範囲になりますので、その値が「1」であれば列選択されている可能性があると判断します。
  • そのフォームの「SelHeight」プロパティの値から範囲選択されている「行数」を取得します。
    ”列全体が範囲選択”されている場合はそこに表示されている全レコード数以上の値になりますので、その値が「Recordset.RecordCountプロパティの値以上」であれば列選択されている可能性があると判断します。
    ※「SelHeight」プロパティの値はレコードの追加が可能なフォームかどうかによって変わります。新規用の空レコードも選択されていれば1多い値となりますので、「>=」という式で判断しています
  • 最終的に上記の2つを満たしていたら”列全体が範囲選択”されていると判断します。
    ※実際には「SelHeight」だけでも判断できるのですが、「SelTop」プロパティの紹介も兼ねるとともに、より厳密なチェックとして「SelTop」も調べています。

    【注】
    「SelLeft」プロパティの値は「2」から始まります。たとえば下記の例では左端の「商品コード」の列が「2」となります。「1=レコードセレクタの分」としてカウントします。

実行例:


| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved