So-net無料ブログ作成

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

アクセスのフォームで、

指定したフィールドに、特定の文字列を含むレコードを抽出(フィルタリング)する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 コメント