【问题标题】:Access VBA - Find and Replace text for Line Breaks returns weird blocks in my Word documentAccess VBA - 换行符的查找和替换文本在我的 Word 文档中返回奇怪的块
【发布时间】: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), "")
  • 太棒了 :-) 我将信息放入“答案”中 :-)

标签: vba ms-access replace ms-word


【解决方案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 的帮助下解决了这个问题。还是谢谢你!
    猜你喜欢
    • 2017-08-06
    • 2021-10-13
    • 2018-11-11
    • 2021-03-13
    • 1970-01-01
    • 2017-11-07
    • 2019-05-20
    • 2021-04-27
    • 1970-01-01
    相关资源
    最近更新 更多