Access VBA - 换行符的查找和替换文本在我的 Word 文档中返回奇怪的块
Posted
技术标签:
【中文标题】Access VBA - 换行符的查找和替换文本在我的 Word 文档中返回奇怪的块【英文标题】:Access VBA - Find and Replace text for Line Breaks returns weird blocks in my Word document 【发布时间】:2016-04-11 09:32:22 【问题描述】:在我的 Access 表单中,用户可以在文本块中输入一些文本。通常此文本中有多个换行符(因此在文本框的属性中,输入功能更改为返回换行符而不是转到另一条记录)。
用户在表单中键入的文本将使用 VBA 查找和替换功能替换 Word 文档中的某些文本:
With objWord.Selection.Find
.Forward = True
.Wrap = 1
.ClearFormatting
.Execute2007 FindText:="IndexText", ReplaceWith:=NewIndexText, Replace:=2 'string is less than 255 so replace it
End With
这很好用,但是当用户在他们的文本中使用换行符时,我的 Word 文档中会出现这些奇怪的块:
如何在没有块的情况下正确显示换行符(也没有换行符)。
附:我还构建了用于处理超过 255 个字符的文本的代码,但只是没有发布代码,因为它对于这个问题是不必要的。
【问题讨论】:
谢谢@CindyMeister 发现我的字符串在 Access (Chr10) 中包含 Word 无法理解的 LineFeed。我在字符串中进行了替换,将所有 Chr(10) 设置为空字符串:NewIndexText = Replace(NewIndexText, Chr(10), "")
太棒了 :-) 我将信息放入“答案”中 :-)
【参考方案1】:
Word 仅将 ANSI 13 用于分节符。
(你称之为“新行”,但一行在 Word 中有所不同,是 ANSI 11。按 Enter 生成段落;按 Shift+Enter 生成新行。)
如果程序将文本交给使用 ANSI 10 或 10 和 13 的某种组合,甚至完全是其他东西的 Word,您会得到框或其他奇怪的行为。找出字符是什么并使用 NewIndexText 上的 Replace 函数替换为 ANSI 13。
例如(取自 OP 的评论),因为 Access 添加了 ANSI 10:
NewIndexText = Replace(NewIndexText, Chr(10), "")
【讨论】:
【参考方案2】:Word的图片显示字符串NewIndexText中有一些不可打印的字符。
尝试找出这些是哪些,并在您的日常工作之前更换它们。 要识别它们,您可以使用以下代码:
Dim c as String
For Each c in NewIndexText
Debug.Print c & " " & Chr(c)
Next
【讨论】:
遗憾的是这不起作用。不能对字符串进行 foreach,只能使用对象/变体。尽管如此,我还是在 Cindy Meister 的帮助下解决了这个问题。还是谢谢你!以上是关于Access VBA - 换行符的查找和替换文本在我的 Word 文档中返回奇怪的块的主要内容,如果未能解决你的问题,请参考以下文章