我在excel中创建了一个工具,它可以使用两个电子表格,并在我们对工作表本身进行更新时将内容从一个复制到另一个。
该工具纯粹是为复制/粘贴工具而设计的,当前代码将从表到工作表复制和粘贴值。
我必须在工具中包含逻辑以跳过包含公式的单元格,如果工具将当前在源表格中的公式复制并粘贴到目标工作表,它们将不再匹配并抛出#REF错误。关于如何在这里或类似的东西放置for循环的任何建议,以允许它检查和忽略公式的单元格?我只需要复制/粘贴带有数字或值的单元格。
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
答案 0 :(得分:3)
如果您真的想跳过包含公式的单元格,可以使用此示例作为开头。 该代码假定只有公式以等号开头。 编辑:使用问题中的范围扩展示例。
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
答案 1 :(得分:3)
您可以使用SpecialCells
来识别公式
有两个选项
Constant
单元格复制到目标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
答案 2 :(得分:0)
你不能只对所有细胞使用Paste:=xlPasteValues
吗?这样,没有公式被复制到目标表。