参照单元格但保留源单元格文本格式的方法是什么?

6

我有一个单元格,里面有一些文本。比如说A1单元格。

这个文本以某种方式格式化 - 前几个单词是粗体,有换行、不同的字体大小等等。

当我在B1单元格中引用这个单元格时:

=A1

在B1单元格中,我只获得了一段没有A1单元格中存在的格式的长字符串。
有没有办法引用并保留格式?
我可以使用格式刷,它会识别单元格中的换行符,但是部分粗体写作等方面仍然无法识别。

1
一般来说,公式不能复制格式。 - Gary's Student
1
如果您愿意手动使用格式刷来处理单元格 B1,那么您是否愿意手动复制和粘贴呢?这样可以保留所有的格式。或者使用 Worksheet_Change() 事件来启动一个宏,将 A1 复制并粘贴到 B1 中?这样,每当更改 A1 的文本格式等内容时,B1 就会更新 所有 内容。 - Greedo
1个回答

4
根据我的评论:
Private changing As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Target.Address = [A1].Address Or changing Then Exit Sub
    changing = True
    [A1].Copy [B1]
    changing = False

End Sub

上面的代码意味着,每当对单元格A1进行更改时(具体地A1 - 这样代码就不会在表格上每次进行更改时都执行 - 这样会使所有操作变慢),A1中的内容将被复制到B2中。 用法 要使用,只需:
  • 右键单击工作表名称(底部的选项卡),然后选择“查看代码”
  • 粘贴代码
  • 更改任何单元格引用为您想要的引用(例如,将[A1]替换为[A3][A1:A4][blah](即命名的单元格/范围),具体取决于您的需要)
  • 关闭窗口。要保存工作簿,您必须将其另存为.xlsm或.xlb,以保留宏。
  • [A1]ThisWorkbook.ActiveSheet.Range("A1")的简写。通常我建议不要使用它,因为ActiveSheet表示如果代码在ThisWorkbook任何表格上运行,它将复制并粘贴该表格A1B1,而您可能只想在特定工作表上使用特定单元格。
  • 所有的changing操作都是必需的,因为复制/粘贴触发了一个更改事件;即宏会一遍又一遍地触发自己,直到Excel停止它 - 这不是理想的!我声明的changing变量仅充当信号,以停止程序执行自身。

不要使用 changing,而是使用 Application.EnableEvents = FalseApplication.EnableEvents = True - Darren Bartrup-Cook
2
@DarrenBartrup-Cook 虽然那也是一个选项,但我更喜欢使用“更改”标志的方法;通过使用“更改”标志,您不会干扰您实际关心的代码的其他部分,并且您可能希望启用事件。 - Greedo
3
我认为关键短语是“我可以想到”。关闭事件很可能没问题,但您必须考虑每一种情况,以确保您没有搞砸。使用“更改”方法,您可以确信它不会干扰其他代码,因为它是完全自包含的。这就是为什么我更喜欢它,尽管如我所说,对于这个示例来说,两者都可以。 - Greedo
1
一个例子是当涉及Worksheet_Calculate事件时,changing的使用会更可取。如果您的更改事件触发Activesheet.calculate,则在eventsenabled = False设置下,即使您希望触发它,也不会触发Worksheet_Calculate事件,而changing设置仅禁用Worksheet_Change的重新触发,Calculate事件将正常工作。然后,如果Calculate事件本身触发了Worksheet_Change,则通过"If changing Then Exit Sub"禁用Worksheet_Change事件以防止循环。 - Greedo
这项工作是为了满足我的特定目的,谢谢。 - Aurelius
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接