2016-12-05 180 views
4

[最新发现]我发现value(11)实际上有时可以复制公式,但并非总是如此。公式如sumproductsumif不能被复制,但可以复制简单的算术运算。这太奇怪了!我仍然无法弄清楚为什么。VBA如何快速复制单元格的公式和格式?

我知道,如果我想只复制值,最快的方式是

Range("A1").Value = Range("A2").Value 

如果我要复制格式和值,最快的方式是

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

如果我想复制公式,最快的方法是

Range("A1").Formula = Range("A2").Formula 

如果我想复制公式和格式? (我在该单元格中有很多格式,例如条件格式,粗体,下划线,对齐方式,数字显示格式,边框样式等,因此不一定每次传输一种样式。)

+0

复制粘贴没有太大的错误,如果你可以批量执行,而不是逐个单元格 – CallumDA

回答

0

我刚刚发现了一个简单的答案。

Range("A1").Value(11) = Range("A2").Value(11) 
Range("A1").Formula = Range("A2").Formula 

由于value(11)复制一些复杂的公式(我不知道为什么,应该是在Excel中的错误)失败时,我加入了第二条线再次粘贴公式。这应该确保所有公式都被正确复制。

2

如何像这样子:

Sub copyFormattingAndFormulas(source As Range, target As Range) 

    Dim sourceCell, targetCell As Range 
    Dim i, j, lastRow, lastColumn As Integer 
    lastRow = source.rows.count + source.row - 1 
    lastColumn = source.columns.count + source.Column - 1 
    For i = source.row To lastRow 
     For j = source.Column To lastColumn 
      Set sourceCell = Cells(source.row + i - 1, source.Column + j - 1) 
      Set targetCell = Cells(target.row + i - 1, target.Column + j - 1) 
      targetCell.value(11) = sourceCell.value(11) 
      targetCell = sourceCell.Formula 
     Next 
    Next 

End Sub 

它所做的是两者都做,你在问题中表现出的东西在一个特定范围内的循环(好了解.value的(11)!)。

相关问题