1

我在这个话题上找到了很多,但似乎仍然无法让它发挥作用。我有以下代码行:

If isNull(DLookup("id", my_table, my_field & "='" & temp_value & "'")) Then

问题是“O'Connell”中my_field的一个值my_table(带单引号),我不确定如何让 Dlookup 找到它。我试过使用:

my_field & "=" & chr(34) & temp_value & chr(34)

还有许多其他多引号选项,但我似乎无法让它发挥作用。虽然我可以使用 VBA 修改 temp_value 以包含或不包含单引号,但由于表中已经存在单引号,我需要确保它匹配。我只是不知道如何解决它。

4

2 回答 2

2

尽管此处的建议和答案确实有效并解决了文本中引号的许多问题,但我的问题最终与我看到的单引号字符有关,而不是真正的单引号。值得一提的是,我使用的数据是从 Siebel 导出的,而我看到的单引号实际上是 chr(146),其中常规单引号(我说“常规”是因为没有更好的术语)是 chr( 39)。

如果引号有问题,我发现检查字符串中每个字符的 chr 值很有帮助。可能有更好的方法来做到这一点,但这个循环应该会有所帮助:

for i=1 to len(a_string)
    debug.print mid(a_string,i,1) & " - " & asc(mid(a_string,i,1)
next i

asc 函数为您提供一个字符的 chr 代码,因此它循环遍历字符串并在立即窗口中显示每个字符及其相关的 chr 代码(使用 debug.print)。这也有助于查找字符串中可能存在的其他“隐藏”(或不可见)字符。

一旦发现,我使用替换函数将 chr(146) 替换为两个单引号(两个 chr(39)s),正如 HansUp 所建议的那样,效果很好。

于 2012-08-30T12:53:45.943 回答
1

在此示例中,my_table是我的表的名称,并且my_field是该表中字段的名称。

Dim strCriteria As String
Dim temp_value As String
temp_value = "O'Connell"
' use double instead of single quotes to avoid a '
' problem due to the single quote in the name '
strCriteria  = "my_field = """ & temp_value & """"
Debug.Print strCriteria
If IsNull(DLookup("id", "my_table", strCriteria)) Then
    MsgBox "no id found"
Else
    MsgBox "id found"
End If

如果您愿意,可以将名称中的单引号加倍。这应该可以,但请确保您可以区分哪些是双引号,哪些是单引号。

strCriteria = "my_field='" & Replace(temp_value, "'", "''") & "'"
于 2012-08-23T05:54:29.083 回答