Excel VBA复制/粘贴macros:忽略具有公式的单元格

我已经在Excel中创build了一个可以接收两个电子表格的工具,并且在我们对工作表本身进行更新时将内容从一个拷贝到另一个。

该工具纯粹被devise为复制/粘贴工具,当前的代码将复制和粘贴表单中的值。

我必须在工具中包含逻辑来跳过带有公式的单元格,如果工具复制并粘贴当前在源表单中的公式,它们不再匹配并抛出#REF错误。 任何关于如何在这里放置一个for循环的build议或类似的东西,让它检查和忽略公式的细胞? 我只需要它复制/粘贴数字或值的单元格。

Sub CopyWorkbook() Dim wb1 As Workbook, wb2 As Workbook wb1.Sheets("Capex").Range("H1124:AT1173").Copy wb2.Sheets("Capex").Range("H529:AT578").PasteSpecial Paste:=xlPasteAll wb1.Sheets("Capex").Range("H1275:AT1284").Copy wb2.Sheets("Capex").Range("H580:AT589").PasteSpecial Paste:=xlPasteAll 

如果你真的想跳过包含公式的单元格,你可以用这个例子作为开始。 该代码假定只有公式以等号开始。 编辑:展开问题中的范围的示例。

 Sub example() Dim source As Range Dim target As Range Set source = ActiveSheet.Range("A1:B6") Set target = ActiveSheet.Range("D1:E6") copy_non_formulas source:=source, target:=target 'Extended example using the ranges posted in the question 'For the sake of formatting, I omitted the fully qualified 'range names. copy_non_formulas source:=Range("H1124:AT1173"), target:=Range("H529:AT578") copy_non_formulas source:=Range("H1275:AT1284"), target:=Range("H580:AT589") End Sub Public Sub copy_non_formulas(source As Range, target As Range) 'Assumes that all formulas start with '=' and all non formulas do not Dim i As Long Dim j As Long Dim c As Range For i = 1 To source.Rows.Count For j = 1 To source.Columns.Count Set c = source(RowIndex:=i, ColumnIndex:=j) If Left(c.Formula, 1) <> "=" Then target(RowIndex:=i, ColumnIndex:=j).Value = c.Value End If Next j Next i End Sub 

而不是循环逐个单元格,您可以使用SpecialCells来识别公式

有两个选项

  1. 仅将Constant单元复制到目标
  2. 从目标中删除任何Formula单元格

如果你的公式出现在一个连续的块中,那么(1)很容易工作,否则这将导致需要复制的区域。 所以(2)是优选的

你的第一个范围可以被覆盖。

 Dim rng1 As Range Set rng1 = Range("H1124:AT1173") rng1.Copy [h1275] On Error Resume Next [h1275].Resize(rng1.Rows.Count, rng1.Columns.Count).SpecialCells(xlFormulas) = vbNullString On Error GoTo 0 

你不能只使用Paste:=xlPasteValues所有单元格? 这样没有公式被复制到目标工作表。