我有以下功能用于检查我的文本字段,如果它包含一些单词,它将显示名为" 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
答案 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