Ms access 在vba中使用函数代替模块进行DML操作

Ms access 在vba中使用函数代替模块进行DML操作,ms-access,vba,Ms Access,Vba,我有一个名为MyTable的表,它有字段名称(文本),其中有值,'MFG@#','jkl%980',我编写了一个函数来删除这样的特殊字符 Function fn_RemoveSpecialChars(strText As String) As Boolean Dim db As DAO.Database Set db = CurrentDb() Dim output As String Dim c Dim i As Integer For i

我有一个名为
MyTable
的表,它有字段
名称(文本)
,其中有值,
'MFG@#'
'jkl%980'
,我编写了一个函数来删除这样的特殊字符

Function fn_RemoveSpecialChars(strText As String) As Boolean

    Dim db As DAO.Database
    Set db = CurrentDb()

    Dim output As String
    Dim c
    Dim i As Integer

    For i = 1 To Len(strText)
            c = Mid(strText, i, 1)
            If (c >= "a" And c <= "z") Or (c >= "0" And c <= "9") Or (c >= "A" And c <= "Z") Then
                output = output & c
            Else
                output = output & ""
            End If
        Next

        fn_RemoveSpecialChars = LTrim(RTrim(output))
    End Function`
如果我使用与模块相同的函数,那么它对我来说可以正常工作,但是如果我像上面所示的函数一样使用,那么它将不工作,可能是因为
UPDATE
是DML操作。由于某些用户需求,我无法使用模块或程序,因此是否有其他方法实现上述功能?如有任何帮助,将不胜感激

输入:制造商@#123美元
输出:MFG123

您的函数返回错误的数据类型-它必须是字符串,而不是布尔值

Function fn_RemoveSpecialChars(strText As String) As String

到底是什么不起作用?我的意思是,更新没有发生,它显示了无法识别的udf,如果我在模块中使用,db.execute“update MyTable set Names=fn_RemoveSpecialChars(Names)”会起作用吗?您能解释一下将函数用作模块的意思吗?我不明白这一点-我们这里有一个语言问题。您的
db.Execute
需要更改:
db.Execute“updatemytable set Names=”&fn_RemoveSpecialChars(name)和“WHERE…”
(更改了引号并添加了WHERE子句)。我不确定这是否能解决您的问题。还有一件小事:如果不需要
else
-语句,那么就省去它。模块是一种您可以编写函数的类型,如果我将其用作模块,我的代码绝对可以工作,但由于用户需求,我不使用模块,需要上述替代解决方案
Function fn_RemoveSpecialChars(strText As String) As String