Access中移除单引号:VBA代码转换语法错误排查
解决VBA中SQL语法错误的问题
你遇到的问题根源是VBA中SQL语句的字符串格式错误,具体有两点:
SQL语句未作为字符串包裹
VBA中执行SQL必须将语句用双引号括起来作为字符串参数传递,直接写SQL语句会被VBA解析为无效代码结构。单引号转义错误
在VBA的双引号字符串内部,若要表示SQL中的单个单引号,需要用两个连续单引号转义;如果SQL中用双引号作为字符串分隔符,在VBA里则需要用""转义双引号。
针对你的需求的正确VBA代码
你的目标是替换Name字段中的单引号为空,以下是两种可行写法:
写法一:单引号转义法
Dim strSQL As String ' 整个SQL用双引号包裹,SQL中的单引号用两个连续单引号转义 strSQL = "UPDATE Tbl_Invoices SET Tbl_Invoices.[Name] = Replace([Name], '''', '') WHERE Tbl_Invoices.Update_date = Date();" ' 执行SQL,dbFailOnError参数用于触发错误提示,方便排查问题 CurrentDb.Execute strSQL, dbFailOnError
写法二:用Chr(39)代替单引号(更直观)
Chr(39)是ASCII码对应的单引号,用它代替直接写单引号可以避免转义混淆:
Dim strSQL As String strSQL = "UPDATE Tbl_Invoices SET Tbl_Invoices.[Name] = Replace([Name], " & Chr(39) & Chr(39) & ", '') WHERE Tbl_Invoices.Update_date = Date();" CurrentDb.Execute strSQL, dbFailOnError
补充说明
- 原Access查询中你用
"'"表示单引号(HTML转义后的写法),实际对应SQL里的',但在VBA字符串中必须通过转义才能正确表示,否则会导致字符串提前闭合,触发语法错误。 - 执行SQL时建议使用
CurrentDb.Execute而非DoCmd.RunSQL,前者更灵活且可以通过dbFailOnError参数捕获执行中的错误。
内容的提问来源于stack exchange,提问作者pio pio
相关产品推荐
相关产品推荐

