VBA特殊字符U + 2264和U + 2265

时间:2014-07-03 09:17:27

标签: excel excel-vba symbols vba

我有一个令人沮丧的问题。我有一个包含其他字符的字符串,不在此list中(检查链接)。我的字符串表示SQL查询。

这是我的字符串可以包含的示例:INSERT INTO test (description) VALUES ('≤ ≥ >= <=')

当我检查数据库时,该行已成功插入,但字符“≤”和“≥”将替换为“=”字符。 在数据库中,描述栏中的字符串看起来像“= =&gt; =&lt; =”。

对于大多数人物我都可以获得一个字符代码。我用谷歌搜索了这两个符号的字符代码,但我找不到一个。我的目标是检查我的字符串是否包含这两个字符,然后将其替换为“&gt; =”和“&lt; =”

===稍后编辑===

我试图检查for循环中的每个字符;

tmp = Mid $(str,i,1)

当我的for循环达到“≤”字符时,

tmp将具有值“=”,因此Excel无法在VB字符串中读取此“≤”字符,然后当我检查字符代码时,我获取代码“=”(Chr(61))

2 个答案:

答案 0 :(得分:0)

你能弄清楚&#34;≤&#34;的字符代码是什么和&#34;≥&#34;你的数据库字符集是?如果是这样,那么可以尝试用chrw(character_code)替换查询字符串中的两个字符。

我刚刚使用Excel作为我的数据库测试了你想要做的事情 - 它看起来工作正常。

编辑:假设您仍然卡在此处并寻求帮助 - 您可以确认您正在使用的数据库,以及&#34;描述&#34;的任何类型信息设置。你想在字段中插入字符串吗?

Edit2:我不熟悉SQL服务器,但不是你的&#34;描述&#34;字段设置为某种数据类型?如果是的话它是什么,它是否支持unicode字符? ncharvar,nchar似乎是支持Unicode的sql server数据类型的例子。

听起来你可能也想尝试添加一个&#34; N&#34;查询字符串中值的前缀 - 请参阅 Do I have use the prefix N in the "insert into" statement for unicode?&amp; how to insert unicode text to SQL Server from query window

Edit3:varchar没有资格正确呈现Unicode - 请参阅此处What is the difference between varchar and nvarchar?。你能切换到nvarchar吗?如上所述,您可能还希望在查询字符串中使用&#39; N&#39;为了充分发挥作用

Edit4:我不能多谈论sqlserver,但你在这里看到的是VBA如何显示角色,而不是它如何实际存储在内存中 - 这是底线。 VBA不会显示&#34;≤&#34;因为它不支持Unicode字符集。但是,它可能 - 而且确实 - 正确存储二进制表示。

有关此问题的任何证据,只需尝试从VBA将字符粘贴回Excel中的另一个单元格,然后您将检索原始字符 - 或者查看VBA中的二进制表示形式:

Sub test()
    Dim s As String
    Dim B() As Byte

    '8804 is "≤" character in Excel character set
    s = ChrW(8804)

    'Assign memory representation of s to byte array B
    B = s

    'This loop prints "100" and "34", respectively the low and high bytes of s coding in memory
    'representing binary value 0010 0010 0110 0100 ie 8804
    For i = LBound(B) To UBound(B)
        Debug.Print B(i)
    Next i

    'This prints "=" because VBA can not render character code 8804 properly
    Debug.Print s
End Sub

答案 1 :(得分:0)

如果我复制文本INSERT INTO test (description) VALUES ('≤ ≥ >= <=')并将其粘贴到VBA编辑器中,则会变为INSERT INTO test (description) VALUES ('= = >= <=')

如果我将该文本粘贴到Excel单元格或Access表格的文本字段中,则会正确粘贴&#34;&#34;。

这似乎是支持字符代码的问题,我建议您查看this SO question

你程序中的是否来自该字符串,因为它无法在VBA中输入?


编辑:我用下面的代码尝试了一下,它就像一个把你的异国情调的角色从工作表转移到桌子上的魅力!

Sub test1()

    Dim db As Object, rs As Object, cn As Object
    Set cn = CreateObject("DAO.DBEngine.120")
    Set db = cn.OpenDatabase("P:\Database1.accdb")
    Set rs = db.OpenRecordset("table1")
    With rs
        .addnew
        .Fields(0) = Range("d5").Value
        .Update
    End With
End Sub