【问题标题】:Prevent reformatting of characters when changing line in cell更改单元格中的行时防止重新格式化字符
【发布时间】:2016-07-06 23:56:56
【问题描述】:

我有一个带有格式化文本的单元格,其中包含我想用换行符替换的某个子字符串。子字符串是带有方括号的 [enterkey]。这是这个问题Replace HTML tag(</br>) with Alt+Enter in Excel 的一个变体,但我想在换行后继续格式化。

我使用的代码是一个简单的替换,其中 rng2 是输入和输出单元格:

rng2.Value = Replace(rng2.Value, "[enterkey]", Chr(10))

我的问题

在插入换行符时,如何防止该代码复制上述行的格式?我希望它保持原样并简单地插入一个换行符,如图所示。


更多信息

我实际上是在转换为 HTML 并返回。我不想添加不必要的细节,但如果人们真的想知道,那是因为我将值存储在 Access 数据库中,并且我想保留单元格格式。从 Access 检索信息时,我想再次获得正确的格式。这个问题只涉及转换回来。详情见下图。

【问题讨论】:

  • 在进行替换后可能需要在单元格上运行类似this one 的例程。可能需要使用Instr 获取Chr(10) 的位置才能知道哪些字符要加粗。
  • 我认为预处理字符串以使 [enterkey] 与文本后的格式相同可能比后处理更有效,因为这样会丢失所需的格式。可能类似于在 [enterkey] 之后复制第一个字符的格式并使其相同。这样替换后,格式不会改变。我该怎么办?
  • 是否总是bold第一行和italic第二行?
  • 否;可能有 1 行,也可能有 10 行。会有粗体、斜体、字体、字体颜色。任何你能想到的放入 Excel 单元格的格式,真的。它实际上是一个 HTML 字符串,我将
    替换为 [enterkey],然后将 HTML 更改为富文本格式。我不得不更改
    因为更改格式时会导致单元格更改,而不是行更改。它工作正常,并产生类似于输入单元格的结果(但通常更长)
  • 好的。与您发布的示例相比,这是一组完全不同的问题......让我从我正在构建的想法中测试更多

标签: vba excel


【解决方案1】:

经过一番研究,我得到了一些有用的东西。

这段代码:

Sub ReplaceEnterKey()

Dim rng2 As Range
Set rng2 = Range("O15")

Dim iChr As Integer
iChr = InStr(1, rng2.Value, "[e") 'find beginning of first occurence of "[enterkey]"

Do Until iChr = 0 'loop until no more occurences found

    rng2.Characters(iChr, 10).Delete 'remove found occurrence of "[enterkey]" - 10 characters
    rng2.Characters(iChr, 0).Insert Chr(10) 'insert carriage return where "[enterkey]" used to be

    iChr = InStr(1, rng2.Value, "[e") 'look for next occurence

Loop

End Sub

创建了这个结果。 N15 原为 O15

【讨论】:

  • 优秀。这正是所需要的。回想起来,你会发现我不需要分享所有额外的信息;)
  • @DavidG。事后诸葛亮总是 20/20。你的第二条评论让我来到了这个地方。根据您的原始示例,我想到了一个更简单的解决方案,但结果确实不完整。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
相关资源
最近更新 更多