Unless there's a reason for keeping them in the text, you might
try running an Update query to change them permanently.
The ASCII value for an opening double smart quote is 147, a
closing double smart quote is 148. An opening single smart quote
is 145, a closing single smart quote is 146.
Those are the ANSI values. For instance, ASCII 148 is the o with
umlaut.
I'm very confused here, as when I open Access, Chr(148) does return
a curly quote, and Asc("”") (that's a curly close quote in the
center returns 148. It surprises me that the Asc() function returns
an ANSI value. The help file is silent on the distinction between
ASCII and ANSI encoding, and just says "character code."
That means you can use:
UPDATE MyTable
SET MyField = Replace(Replace(Replace(Replace(MyField, Chr(147),
Chr(34)), Chr(148), Chr(34)), Chr(145), Chr(39)), Chr(146),
Chr(39))
Alternative, use that awful Replace in a Select query.
....which is to say that your recommendation works, but your
terminology was inaccurate.
BTW, I've contemplated for years creating a Replace function that
would accept an array for both the find and replace arguments, as is
the case in PHP, but have never quite gotten round to it. It would
look something like this:
ODQ = Chr(147)
CDQ = Chr(148)
OSQ = Chr(145)
CDQ = Chr(146)
DQ = Chr(34)
SQ = Chr(39)
strResult = aReplace([InputField], _
Split(ODQ & ",” & CDQ & "," & OSQ & "," & CSQ,","), _
Split(DQ & "," & DQ & "," & SQ & "," & SQ,",")
Or another way:
Dim strFind(3) As String
Dim strReplace(3) As String
strFind(0) = Chr(147)
strFind(1) = Chr(148)
strFind(2) = Chr(145)
strFind(3) = Chr(146)
strReplace(0) = Chr(34)
strReplace(1) = Chr(34)
strReplace(2) = Chr(39)
strReplace(3) = Chr(39)
strResults = aReplace([InputField], strFind(), strReplace())
Obviously, you couldn't do this in a query, where the first solution
would work better, but this kind of thing in code would be more
useful, particularly if you have to do multiple replace operations
with the same find/replace pairs.