我如何复制丰富的文本格式的Excel单元格,但不是全局单元格格式?

使用VBA,我将一个单元格的值复制到另一个单元格中:

Dim s As Range Dim d As Range Set s = Range("A1") Set d = Range("B2") d.Value = s.Value 

这工作正常,但如果源包含丰富的文本格式,格式将丢失。

我可以复制整个单元格,格式和所有:

 s.Copy d 

但是,这不仅带来了丰富的文本格式,还带来了单元格背景颜色,边框等的全局格式。我只对适用于文本部分的复制格式感兴趣(例如,句子中的一个单词粗体)。

我也试着复制每个字符的格式:

 For ci = 1 to Len(sourcevalue) d.Characters(ci, 1).Font.Bold = s.Characters(ci, 1).Font.Bold Next 

上面的实际代码包括斜体,下划线等,并将字符()作为速度对象进行caching,但是对于生产使用来说性能还是太慢了。

我能想到的最后一个select是用格式复制单元格,然后撤消对背景颜色或图案,边框,字体名称/大小等的任何更改:

 bg = d.Interior.ColorIndex s.Copy d d.Interior.ColorIndex = bg 

这仍然看起来很糟糕,很难挽回所有格式的重新应用,我不能“撤消”格式,如粗体,斜体等,可以应用在单元格或字符级别,而不会擦除字符级设置。

那里有其他的select吗? Excel OpenOfficeXML文件中的格式存储在字符范围内,但是不会出现这些格式化的范围可以通过API获得,至less我可以find。

编辑:使用下面的KazJaw的方法,我能够得到我所需要的以下代码:

 Dim TmpFormat As Range Set TmpFormat = Range("$XFD$1") Dest.Copy TmpFormat.PasteSpecial xlPasteFormats Source.Copy Dest.PasteSpecial xlPasteAll TmpFormat.Copy Dest.PasteSpecial xlPasteFormats Dest.Font.Name = TmpFormat.Font.Name Dest.Font.Size = TmpFormat.Font.Size TmpFormat.ClearFormats 

这暂时保留在第一行的最后一个单元格中的目标单元格的格式,复制所有格式的源代码,将格式粘贴到临时单元格中,最后还将保留的总体字体和大小(在我的情况下,我不想从源复制)。 最后,清除临时单元格,以免影响工作表尺寸。

这是一个不完美的解决scheme,尤其是因为它依赖于剪贴板,但是性能很好,而且完成了它所需要的工作。

我刚刚做了一些testing,对于可能为您解决问题的结果,我感到有点惊讶,或者只是提供更多的帮助。

想象一下我们在开始的时候有这样的情况:

在这里输入图像说明

如果你运行这个简单的代码:…

 Sub PossibleSolution() Range("A1").Copy 'full formatted cell Range("A3").PasteSpecial xlPasteAll Range("A2").Copy 'clear format cell Range("A3").PasteSpecial xlPasteFormats End Sub 

…你会得到以下结果:

在这里输入图像说明

Range.Value有一个可选的RangeValueDataType参数(11是xlRangeValueXMLSpreadsheet ):

  Range("B2").Value(11) = Range("A1").Value(11)