【问题标题】:Merge contents of 2 Excel cells keeping character format intact (using VBA)合并 2 个 Excel 单元格的内容,保持字符格式不变(使用 VBA)
【发布时间】:2016-02-07 23:45:33
【问题描述】:

正如标题所说:我尝试将 2 个单元格的内容合并到 Excel 中的第 3 个单元格中。有一个类似的问题here on SO,但这些解决方案不能保持字符格式不变。例如,源单元格内容的一部分被格式化为粗体和红色,其他部分是正常的。当我像合并它们时

 Range("A3") = Range("A1") & Range("A2")

那么 A1 和 A2 的任何格式都会丢失。我需要的是一种保持格式不变的解决方案。这将成为一个更大的 VBA 程序的一部分,所以我需要一个 VBA 解决方案,请不要使用公式。 Excel 版本是 2002(XP)。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    Doc,这是一个有趣的问题。我自己被难住了,但看到了它的价值,所以经过一番搜索,这就是我发现的。从vbaexpress我对单元格格式有了基本的了解,我在下面修改了供大家使用。

    Sub Merge_Cells()
    Dim iOS As Integer
    Dim rngFrom1 As Range
    Dim rngFrom2 As Range
    Dim rngTo As Range
    Dim lenFrom1 As Integer
    Dim lenFrom2 As Integer
    
      Set rngFrom1 = Cells(1, 1)
      Set rngFrom2 = Cells(1, 2)
      Set rngTo = Cells(1, 3)
      lenFrom1 = rngFrom1.Characters.Count
      lenFrom2 = rngFrom2.Characters.Count
    
      rngTo.Value = rngFrom1.Text & rngFrom2.Text
    
      For iOS = 1 To lenFrom1
        With rngTo.Characters(iOS, 1).Font
          .Name = rngFrom1.Characters(iOS, 1).Font.Name
          .Bold = rngFrom1.Characters(iOS, 1).Font.Bold
          .Size = rngFrom1.Characters(iOS, 1).Font.Size
          .ColorIndex = rngFrom1.Characters(iOS, 1).Font.ColorIndex
        End With
      Next iOS
      For iOS = 1 To lenFrom2
        With rngTo.Characters(lenFrom1 + iOS, 1).Font
          .Name = rngFrom2.Characters(iOS, 1).Font.Name
          .Bold = rngFrom2.Characters(iOS, 1).Font.Bold
          .Size = rngFrom2.Characters(iOS, 1).Font.Size
          .ColorIndex = rngFrom2.Characters(iOS, 1).Font.ColorIndex
        End With
      Next iOS
    
    End Sub
    

    只需将 3 个单元格()更改为您的特定单元格。也许有人可以找到一种更清洁的方法,但是当我对此进行测试时,它的工作原理正如我理解你(和我)所希望的那样。
    希望这会有所帮助...

    【讨论】:

    • 感谢克雷格,这个答案与我在过去一小时找到的解决方案非常相似。有一个缺点:速度很慢(也就是说,对于 200-300 个字符,用户可以看到格式化是如何发生的),所以我希望其他人能找到更好的解决方案。
    • 如果在开头添加这些,速度会如何变化? application.screenupdating = false application.enableevents = false application.calculation = xlmanual 然后最后 application.calculation = xlautomatic application.screenupdating = true application.enableevents = true
    • @guitarthrower:太好了,有帮助!!至少,可见的效果消失了,而这正是我们所寻找的。如果没有人找到更好的解决方案,我明天会接受 Craigs 的回答。
    • @Doc Brown:很高兴我能帮上忙。如果您认为评论有帮助,我们将不胜感激。
    【解决方案2】:

    这有点摸不着头脑,但如果你能以某种方式编写一个执行以下操作的宏,它似乎会很好地工作:

    1. 复制要合并的整个范围(例如,A1:B200)。
    2. 打开一个新的 Word 文档。
    3. 粘贴(在 Word 中创建表格)。
    4. 选择表格。
    5. 使用空白分隔符(或任何您想要的)执行“转换为文本”。
    6. 复制生成的文本。
    7. 粘贴到 Excel 中的所需位置(例如,C1)。

    我知道您可以为 Excel 和 Word 编写 VBA 宏,但我怀疑您是否可以从 Excel 控制 Word 文档。不过,您可能可以编写一个可以打开和控制两个文档的 C# 控制台应用程序。

    【讨论】:

    • @DanM:事实上,我正在开发的 VBA 程序确实可以从 Excel 控制 Word!我没有问题将 Excel 单元格的内容复制到 Word,保持格式不变。任务是让用户从单独的工作表中选择一些(格式化!)样板,将它们合并到一个单元格中,手动替换一些占位符文本,然后(当完成大约一百个单元格时)在 Word 中生成报告。出于实际原因,我更喜欢这样的解决方案,其中 Word 不只是为了合并样板而启动,而是在之后才用于最终报告。
    【解决方案3】:

    我知道无法直接执行此操作,但是将范围复制到新范围然后循环遍历原始范围的每个字符的 interior 属性并复制这些属性并不难。这应该为结果范围内的每个字符保留颜色、字体样式等。

    回家时间在招手,所以我没有时间举出一个例子,但我相信其他人会在需要时编辑/回答。

    【讨论】:

      猜你喜欢
      • 2014-08-12
      • 1970-01-01
      • 2012-10-20
      • 2012-11-10
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      相关资源
      最近更新 更多