Access VBA

Last-modified: 2021-03-02 (火) 00:48:08

文字検索フォーム
Option Compare Database
Option Explicit

Public Function ExtractNumber(ByRef Text As String, ByVal index As Long) As Double
'数字だけを抜き出す関数

   Dim re As Object
   Dim matches As Object
   If re Is Nothing Then
       Set re = CreateObject("VBScript.RegExp")
       re.Global = True
       re.Pattern = "(\d+(?:,\d+)*(?:\.\d+)?)"
   End If
   Set matches = re.Execute(StrConv(Text, vbNarrow))
   ExtractNumber = CDbl(matches(index).Value)

End Function

Private Sub btn_メーカー_Click()

   chk_含む1 = True
   cmb_検索対象フィールド1 = "メーカー"
   cmb_含む1.SetFocus

End Sub

Private Sub btn_JAN_Click()

   chk_含む1 = True
   cmb_検索対象フィールド1 = "JAN"
   cmb_含む1.SetFocus

End Sub

Private Sub btn_型番_Click()

   chk_含む1 = True
   cmb_検索対象フィールド1 = "型番"
   cmb_含む1.SetFocus

End Sub

Private Sub btn_検索_Click()

   chk_含む1 = True
   cmb_検索対象フィールド1 = "検索"
   cmb_含む1.SetFocus

End Sub

Private Sub btn_特徴_Click()

   chk_含む1 = True
   cmb_検索対象フィールド1 = "特徴"
   cmb_含む1.SetFocus

End Sub

Private Sub btn_写真_Click()

   chk_含む1 = True
   cmb_検索対象フィールド1 = "写真"
   cmb_含む1.SetFocus

End Sub

Private Sub btn_商品_Click()

   chk_含む1 = True
   cmb_検索対象フィールド1 = "商品"
   cmb_含む1.SetFocus

End Sub

Private Sub cmb_含む1_AfterUpdate()

   Dim split_a As Variant
   'Accessでの改行コードがあった場合は削除(=空文字に置換)
   If InStr(Me![cmb_含む1], vbCrLf) Then
       'MsgBox "使用禁止のため、改行は削除されます。", vbExclamation, "確認"
       'Me![cmb_含む1] = Replace(Me![cmb_含む1], vbCrLf, "")
       split_a = Split(Me![cmb_含む1], vbCrLf)
       Me![cmb_含む1] = split_a(0)
   End If

End Sub

Private Sub Form_Activate()

   DoCmd.Restore
   cmb_含む1.SetFocus

End Sub

Private Sub chk_含む1_Click()

   cmb_含む1.SetFocus

End Sub

Private Sub cmb_含む1_GotFocus()

   chk_含む1.Value = True

End Sub

Private Sub cmb_検索対象フィールド1_AfterUpdate()

   cmb_含む1.SetFocus

End Sub

Private Sub cmb_検索対象フィールド2_AfterUpdate()

   cmb_含む2.SetFocus

End Sub

Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

   If KeyCode = vbKeyEscape Then
       'KeyCode = 0
           Me.Visible = False
           cmb_含む1.SetFocus
   End If

End Sub

Private Sub Form_Open(Cancel As Integer)

   cmb_含む1.SetFocus

End Sub

Private Sub btn_ロゴ_Click()

   chk_含む1 = True
   cmb_検索対象フィールド1 = "ロゴ"
   cmb_含む1.SetFocus

End Sub

Private Sub フィルタ実行ボタン_Click()
'On Error GoTo err1:

   Dim strKataban As String
   Dim varKataban As Variant
   Dim intKataban As Integer
   Dim strShohin  As String
   Dim varShohin  As Variant
   Dim intShohin  As Integer
   Dim i          As Integer
   Dim strKensaku As String
   Dim varKensaku As Variant
   Dim strField   As String
   If chk_含む1 = True And IsNull(Me![cmb_含む1].RowSource) Then
       Me![cmb_含む1].RowSource = Me![cmb_含む1].Value
   ElseIf chk_含む1 = True And Not IsNull(Me![cmb_含む1].RowSource) Then
       Me![cmb_含む1].RowSource = Me![cmb_含む1].Value & ";" & Me![cmb_含む1].RowSource
   End If
   strField = Me![cmb_検索対象フィールド1]
   '「cmb_検索対象フィールド1」が「検索」だったら-をトル
   If Me![cmb_検索対象フィールド1] = "検索" Then
       strKataban = Replace(Me![cmb_含む1], "-", "")
       strKataban = Replace(strKataban, "/", "")
       strKataban = Replace(strKataban, "・", "")
       strKataban = Replace(strKataban, "~", "")
       strKataban = Replace(strKataban, "!", "")
       strKataban = Replace(strKataban, "+", "")
       strKataban = Replace(strKataban, "*", "")
       strKataban = Replace(strKataban, "×", "")
       strKataban = Replace(strKataban, "~", "")
       strKataban = Replace(strKataban, "#", "")
       strKataban = Replace(strKataban, "&", "")
       strKataban = Replace(strKataban, "!", "")
       strKataban = Replace(strKataban, "(", "")
       strKataban = Replace(strKataban, ")", "")
       strKataban = Replace(strKataban, "’", "")
       strKataban = Replace(strKataban, ":", "")
   Else
       strKataban = Me![cmb_含む1]
   End If
   '数字11~13桁だったらstrFieldをJANにする
   If Left(strKataban, 1) = "9" Or Left(strKataban, 1) = "8" Or Left(strKataban, 1) = "7" Or Left(strKataban, 1) = "6" _
   Or Left(strKataban, 1) = "5" Or Left(strKataban, 1) = "4" Or Left(strKataban, 1) = "3" Or Left(strKataban, 1) = "2" _
   Or Left(strKataban, 1) = "1" Or Left(strKataban, 1) = "0" Then
       Dim JANCODE As Variant
       JANCODE = ExtractNumber(strKataban, 0)
       If Len(JANCODE) = 13 Or Len(JANCODE) = 12 Or Len(JANCODE) = 11 Then
          strField = "JAN"
       End If
   End If
   'データ入力フォームの検索1にフィルタした文字列を入れる
   If InStr(strField, "検索") Then
       Forms![データ入力フォーム].[型番a] = strKataban
   Else
       Forms![データ入力フォーム].[型番a] = Null
   End If
   varKataban = Split(strKataban, " ", , vbTextCompare)
   intKataban = UBound(varKataban)
   '絞り込みフィルタ
   If intKataban > 0 Then
       For i = 0 To intKataban
           If i = 0 Then
               strKensaku = strField & " LIKE ""*" & varKataban(i) & "*"""
           Else
               strKensaku = strKensaku & "AND " & strField & " Like ""*" & varKataban(i) & "*"""
           End If
       Next
       '検索文字に改行があたらトル
       strKensaku = Replace(strKensaku, vbCrLf, "")
       Forms![データ入力フォーム].Filter = strKensaku
   '単純フィルタ
   Else
       '検索文字に改行があたらトル
       strKataban = Replace(strKataban, vbCrLf, "")
       Forms![データ入力フォーム].Filter = strField & " LIKE ""*" & strKataban & "*"""
   End If
   'フィルタの実行
   Forms![データ入力フォーム].FilterOn = True
   Forms![データ入力フォーム].OrderBy = "入稿 DESC"
   Me.Visible = False
   cmb_含む1.SetFocus
   Exit Sub

err1:

   MsgBox (Err.Number & " : " & Err.Description)

End Sub

Private Sub 閉じる_Click()

   Me.Visible = False
   cmb_含む1.SetFocus

End Sub