VBA 代码中的字符变化
Posted
技术标签:
【中文标题】VBA 代码中的字符变化【英文标题】:Characters changing in VBA code 【发布时间】:2014-04-14 05:37:18 【问题描述】:我在 VBA 中打开一个记录集,其中包含特殊字符,如复选标记、项目符号和其他从 Word 中提取的内容。该过程会将这些字段重新添加到单词书签中,但我遇到了格式化问题。我从富文本备注字段中提取,即使字符出现在表格中,当我将鼠标悬停在代码中的值上时它们也不会出现。我在代码的一个框中得到了问号,当它被导出到我的 word 文档中时。项目符号出现在代码中的鼠标悬停值和导出到 word 中,但是当我在代码中打开记录集时,其他字符会发生变化。
我认为这是某种 UTF 转换问题,但我不知道为什么它在表中会很好,但是当我使用 DAO.Database.OpenRecordset 时会搞砸。这些是 Word 固有的符号,并出现在访问表中。将其放入 DAO.recordset 后,我似乎失去了一切。
我尝试创建一个querydef并打开它,在OpenRecordset中查询表,直接在OpenRecordset中打开表,它们都不起作用。
【问题讨论】:
你试过用 ADODB 代替 DAO 吗? 【参考方案1】:不要被 VBA 编辑器中的鼠标悬停行为误导。它根本无法显示多字节字符(即,基本上是 Windows“ANSI”字符集之外的任何内容)。 DAO 确实可以操作多字节(例如,Unicode)字符,但是 VBA 编辑器不能在工具提示文本、即时窗口或监视窗口中显示它们.
为了说明,对于名为 [vocabulary] 的 Access 表中的以下测试数据
ID word language english_equiv
-- ------ -------- -------------
3 γιορτή Greek feast
以下代码
Option Compare Database
Option Explicit
Sub rsTest()
Dim cdb As DAO.Database, rst As DAO.Recordset
Dim strm As ADODB.Stream
Set cdb = CurrentDb
Set rst = cdb.OpenRecordset("SELECT word FROM vocabulary WHERE ID=3", dbOpenSnapshot)
Debug.Print rst(0).Value
Set strm = New ADODB.Stream
strm.Type = adTypeText
strm.Charset = "utf-8"
strm.Open
strm.WriteText rst(0).Value
strm.SaveToFile "C:\Users\Gord\Desktop\foo.txt"
End Sub
在 VBA 编辑器的即时窗口中显示以下内容
????t?
但生成的文本文件确实包含正确的(希腊)字符
因此,不要为 VBA 编辑器显示中的 ?
字符而烦恼,而应专注于 Word 文档中的实际结果。
【讨论】:
感谢这对大多数字符都有效,谁知道其他字符集是什么字符集。现在我必须检查并将 html 标签 memo 字段添加到可用的东西,以便我可以将它们添加到书签。感谢您的帮助!以上是关于VBA 代码中的字符变化的主要内容,如果未能解决你的问题,请参考以下文章
Excel Vba 如何将单元格的值,同步显示在窗体中的LABEL或TEXTBOX中?