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 文档中返回奇怪的块的主要内容,如果未能解决你的问题,请参考以下文章

VBA 查找/替换和文本颜色更改

基于Excel中数据库的VBA在word中查找和替换

使用 Excel VBA 宏在 Word 中查找和替换页脚文本

如何使用 VBA 在 Excel 注释中查找和替换日期格式

BASH:在文本之间查找换行符并用两个换行符替换

如何从单元格中删除换行符,但将地址格式保留在同一单元格VBA中