用于在Access 2007中查找文本字段的功能

时间:2014-10-06 15:59:00

标签: vba ms-access access-vba ms-access-2007

我有以下功能用于检查我的文本字段,如果它包含一些单词,它将显示名为" joinlookupall"

的查找表中的等效单词
Function speclook(ByVal Text)
   If IsNull(Text) Then
     speclook = Null
     Exit Function
End If

Dim Data As LookupData
Static joinlookupall As VBA.Collection

If joinlookupall Is Nothing Then
   Set joinlookupall = New VBA.Collection
   Dim rs As DAO.Recordset
   Set rs = CurrentDb.OpenRecordset("joinlookupall", dbOpenForwardOnly)

    While Not rs.EOF
    Set Data = New LookupData
    If IsNull(rs(1)) Then
    'do nothing
    Else
     Data.Key = "*" + rs(1) + "*"
    End If

    If IsNull(rs(2)) Then
     'do nothing 
    Else
    Data.value = rs(2)
    End If

    joinlookupall.Add Data
     rs.MoveNext

    Wend

 End If


  Dim S As String

 For Each Data In joinlookupall
   If Text Like Data.Key Then
     If Len(S) = 0 Then
       S = Data.value
     Else
       S = S + "," + Data.value
     End If
   End If
Next

 If Len(S) = 0 Then speclook = Null Else speclook = S
 End Function

我的文字是一份工作公告,其中包含工作所需的一些职位,例如"一家公司正在寻找一名电气工程师......" ,该功能将检查作业公告,以查看从查找表中显示合适部门所需的职业

         words (rs(1))         |   department (rs(2))
  -------------------------------------------------
      electrical engineer     |    electric-dep
      electrical engineering  |    electric-dep
      mechanical engineers    |    mechanic-dep

所以在前面的例子中,该函数将显示" electric-dep"

我对这个函数的问题是它总是只用一个

模板检查我的文本
     Data.Key = "*" + rs(1) + "*"

我想使用许多模板来检查我的文本,例如:

 Data.Key =  rs(1) + "*"

 Data.Key =  "*" + rs(1) 

 Data.Key =  "*" + chr(32) + rs(1) + chr(32) + "*"

因此,如果存在任何此模板,该函数将正常工作,因为它现在不适用于所有条件,有时单词存在但却看不到它,因为它只使用一个模板或表单

我曾尝试为(Data.Key)使用变量,但它没有工作,我想知道正确的方法使这个模板一起工作,如果函数找到任何一个,它将工作,显示正确的值

顺便让这个函数工作,你必须创建一个名为" LookupData"的类模块。并将以下代码放入其中

Public Key As String
Public value As String

1 个答案:

答案 0 :(得分:1)

为什么不这样做:

Function speclook(byval text, template as string)
    ...
    While Not rs.EOF
        Set Data = New LookupData
        If not IsNull(rs(1)) Then
            Data.Key = replace(template, "X", rs(1))
        End If

        If not IsNull(rs(2)) Then
            Data.value = rs(2)
        End If

        joinlookupall.Add Data
        rs.MoveNext
    Wend
End Function

然后将该函数调用为

speclook(sometext, "*X*")
speclook(sometext, "*" + chr(32) + "X" + chr(32) + "*")
etc