我正在尝试查找文件中至少与字符匹配的所有代码。因此,如果我写下“ a”,我想知道其中所有包含“ a”的代码名称。如果我写“ anaconda”并且此代码存在,并且至少有一个寄存器,则函数应该找到它。
Private Function VerificaProducto(ByVal Codigo, ByVal Familia, ByVal Proveedor) As String
Dim Horno As Database
Dim Panes As Recordset
Set Horno = CurrentDb
If Proveedor = "Cuetara" Then
Set Panes = Horno.OpenRecordset("almacenpanes", dbOpenDynaset)
If Familia Like "Integral" Then
Panes.FindFirst "codigo = ' " & "*" & Codigo & "*" & " ' and activo = true and tipo = 'Hidratos' and familia LIKE '*'&'INTEGRAL'&'*'"
Else
Panes.FindFirst "codigo = ' " & "*" & Codigo & "*" & " ' and activo = true and tipo = 'Hidratos' and familia NOT LIKE '*'&'INTEGRAL'&'*'"
End If
End If
If Panes.NoMatch Then
Me!NombreProducto = "CODIGO NO PRESENTE EN LAS TABLAS"
VerificaProducto = "producto no encontrado"
Else
VerificaProducto = "producto encontrado"
End If
End Function
对为什么它不起作用有任何想法吗?
答案 0 :(得分:0)
您在搜索字符串中包括两个文字空间:此处:' " &
和此处& "*" & " '
这意味着您仅在codigo以空格开头和结尾时匹配。
废弃这些空格:
If Familia Like "Integral" Then
Panes.FindFirst "codigo = '" & "*" & Codigo & "*" & "' and activo = true and tipo = 'Hidratos' and familia LIKE '*'&'INTEGRAL'&'*'"
Else
Panes.FindFirst "codigo = '" & "*" & Codigo & "*" & "' and activo = true and tipo = 'Hidratos' and familia NOT LIKE '*'&'INTEGRAL'&'*'"
End If
此外,我建议考虑使用转义功能将单引号加倍。如果condigo包含单引号,则您的函数将遇到运行时错误,如果要使用.FindFirst
进一步的注意:and familia NOT LIKE '*'&'INTEGRAL'&'*'
令我感到困惑,似乎您正在尝试将VBA中的字符串连接起来,但事实并非如此。建议您改用and familia NOT LIKE '*INTEGRAL*'
,以确保您使用的是常量而不是变量。
If Familia Like "Integral" Then
同样令人困惑。如果要检查Familia
是否包含字符串"Integral"
,请使用If Familia Like "*Integral*" Then
。如果要测试完全匹配,请使用If Familia = "Integral" Then