我如何复制丰富的文本格式的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)