SSブログ

アクセス小僧:フィルタリング [コンピューター]

アクセスのフォームで、

指定したフィールドに、特定の文字列を含むレコードを抽出(フィルタリング)するVBAマクロを作りました。

【1】まず、アクセスのフォームに以下の部品を追加します。

Access_filter.jpg

・(1) FieldName1 コンボボックス:フィールドを指定します。フィールド名は別にテーブルを作成して、そこを参照します。
・(2) 検索 テキストボックス:フィールドに含まれる文字列を指定します。
・(3) 検索実行 ボタン:レコード抽出を実行するVBAマクロを起動
・(4) 検索フィルタ解除 ボタン:レコード抽出を解除します。

【2】レコード抽出を実行するVBAマクロは次の通りです。

Private Sub 検索実行_Click()
  '【変数】
  Dim MyStr1 As String ' 文字列
  '【実行コード】
  Me.AllowAdditions = False '追加の禁止
  If [FieldName1].Column(1) = "経過日数" Then
    MyStr1 = "経過日数 > " & [検索]
  Else
    MyStr1 = [FieldName1].Column(1) & " like '*" & [検索] & "*'"
  End If
  Me.Filter = MyStr1 ' フィルタ設定
  Me.FilterOn = True ' フィルタ適用
End Sub

・抽出を実行すると、なぜかレコードが自動追加されてしまうので、Me.AllowAdditions = Falseを入れています。
・経過日数フィールドの場合は、検索テキストボックスに入力した数字より大きい経過日数のレコードを抽出します。
・それ以外のフィールドの場合は、検索テキストボックスに入力した文字列を含むレコードを抽出します。

【3】レコード抽出を解除するVBAマクロは次の通りです。

Private Sub 検索フィルタ解除_Click()
  On Error GoTo ERR1
  '【変数】
  Dim myID As Long ' 主キー
  Dim MyStr1 As String ' 文字列
  '【実行コード】
  myID = [myID1] ' 主キーを退避
  Me.AllowAdditions = True '追加の許可
  Me.FilterOn = False ' フィルタ解除
  MyStr1 = "myID1 = " & myID
  With Me.Recordset
    .FindFirst MyStr1
  End With
  Exit Sub
ERR1:
  MsgBox ("エラー(検索フィルタ解除_Click)" & vbCrLf & Err.Description)
End Sub

・抽出を解除する前に主キーを変数に退避します。
・抽出を解除すると、カレントレコードがテーブルの先頭レコードになってしまうため、抽出を解除後、FindFirstで抽出されていたレコードを主キーで検索します。
・禁止していた追加を許可します。(Me.AllowAdditions = True)

【参考Web】
初心者のためのOffice口座
テキストボックスでレコード抽出
https://hamachan.info/win10/access/textbox.html
ヤバイぜ!(10)  コメント(1) 

ヤバイぜ! 10

コメント 1

cheese999

ヤバイぜ! ありがとうございます[__猫]

抽出解除後、なぜFindFirstで検索するのか、説明を追記しました。
by cheese999 (2017-10-07 12:04) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字(英大文字の「オー」、英小文字の「ユー」、アラビア数字の「ハチ」、アラビア数字の「イチ」、アラビア数字の「ニ」)を入力してください。

Facebook コメント

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。