Excel 使用VBA复制和粘贴数组公式
我有一些公式排成一行。我想把它们复制到我其余数据的末尾 使用普通公式时,以下代码有效:Excel 使用VBA复制和粘贴数组公式,excel,vba,Excel,Vba,我有一些公式排成一行。我想把它们复制到我其余数据的末尾 使用普通公式时,以下代码有效: With Sheets("Sheet1") Set formRange = Range(.Range("G2"), .Range("O2").End(xlToRight)) formRange.Copy formRange.Resize(Range("D" & Rows.Count).End(xlUp).Row - 1).PasteSpecial Paste:=xlPasteF
With Sheets("Sheet1")
Set formRange = Range(.Range("G2"), .Range("O2").End(xlToRight))
formRange.Copy
formRange.Resize(Range("D" & Rows.Count).End(xlUp).Row - 1).PasteSpecial Paste:=xlPasteFormulas
Application.CutCopyMode = False
.Range("A1").Select
End With
然而,当我用数组公式替换一些公式时,我得到一个运行时错误1004,它表示pasteRange类的特殊方法失败了
有什么办法可以解决这个问题吗?您需要使用Range.FormulaArray方法:
With Worksheets("Sheet1")
Set formRange = Range(.Range("G2"), .Range("O2").End(xlToRight))
formRange.Copy
Set newRange = (Range("D" & Rows.Count).End(xlUp).Row - 1)
newRange.FormulaArray = formRange
Application.CutCopyMode = False
.Range("A1").Select
End With
您需要使用Range.FormulaArray方法:
With Worksheets("Sheet1")
Set formRange = Range(.Range("G2"), .Range("O2").End(xlToRight))
formRange.Copy
Set newRange = (Range("D" & Rows.Count).End(xlUp).Row - 1)
newRange.FormulaArray = formRange
Application.CutCopyMode = False
.Range("A1").Select
End With
您需要使用Range.FormulaArray方法:
With Worksheets("Sheet1")
Set formRange = Range(.Range("G2"), .Range("O2").End(xlToRight))
formRange.Copy
Set newRange = (Range("D" & Rows.Count).End(xlUp).Row - 1)
newRange.FormulaArray = formRange
Application.CutCopyMode = False
.Range("A1").Select
End With
您需要使用Range.FormulaArray方法:
With Worksheets("Sheet1")
Set formRange = Range(.Range("G2"), .Range("O2").End(xlToRight))
formRange.Copy
Set newRange = (Range("D" & Rows.Count).End(xlUp).Row - 1)
newRange.FormulaArray = formRange
Application.CutCopyMode = False
.Range("A1").Select
End With
如前所述,您不能更改数组的一部分。所以试试这个:
Dim formRange As Range, arrForm As String
With Sheets("Sheet1")
Set formRange = Range(.Range("G2"), _
.Range("O2").End(xlToRight))
arrForm = formRange.FormulaArray
formRange.ClearContents
formRange.Resize(.Range("D" & _
.Rows.Count).End(xlUp).Row - 1).FormulaArray = arrForm
End With
顺便说一句,请注意我在这行中添加的额外点:
formRange.Resize(.Range("D" & _
.Rows.Count).End(xlUp).Row - 1).FormulaArray = arrForm
我假设您属于同一页的D列。如果只是多个范围内的一个数组公式输出,则上述方法有效。
如果每个单元格具有不同的数组公式,则只需在代码中添加偏移量,如下所示:
With Sheets("Sheet1")
Set formRange = Range(.Range("G2"), _
.Range("O2").End(xlToRight))
formRange.Copy
formRange.Offset(1, 0).Resize(.Range("D" & _
.Rows.Count).End(xlUp).Row - 1).PasteSpecial xlPasteFormulas
End With
如前所述,您不能更改数组的一部分。所以试试这个:
Dim formRange As Range, arrForm As String
With Sheets("Sheet1")
Set formRange = Range(.Range("G2"), _
.Range("O2").End(xlToRight))
arrForm = formRange.FormulaArray
formRange.ClearContents
formRange.Resize(.Range("D" & _
.Rows.Count).End(xlUp).Row - 1).FormulaArray = arrForm
End With
顺便说一句,请注意我在这行中添加的额外点:
formRange.Resize(.Range("D" & _
.Rows.Count).End(xlUp).Row - 1).FormulaArray = arrForm
我假设您属于同一页的D列。如果只是多个范围内的一个数组公式输出,则上述方法有效。
如果每个单元格具有不同的数组公式,则只需在代码中添加偏移量,如下所示:
With Sheets("Sheet1")
Set formRange = Range(.Range("G2"), _
.Range("O2").End(xlToRight))
formRange.Copy
formRange.Offset(1, 0).Resize(.Range("D" & _
.Rows.Count).End(xlUp).Row - 1).PasteSpecial xlPasteFormulas
End With
如前所述,您不能更改数组的一部分。所以试试这个:
Dim formRange As Range, arrForm As String
With Sheets("Sheet1")
Set formRange = Range(.Range("G2"), _
.Range("O2").End(xlToRight))
arrForm = formRange.FormulaArray
formRange.ClearContents
formRange.Resize(.Range("D" & _
.Rows.Count).End(xlUp).Row - 1).FormulaArray = arrForm
End With
顺便说一句,请注意我在这行中添加的额外点:
formRange.Resize(.Range("D" & _
.Rows.Count).End(xlUp).Row - 1).FormulaArray = arrForm
我假设您属于同一页的D列。如果只是多个范围内的一个数组公式输出,则上述方法有效。
如果每个单元格具有不同的数组公式,则只需在代码中添加偏移量,如下所示:
With Sheets("Sheet1")
Set formRange = Range(.Range("G2"), _
.Range("O2").End(xlToRight))
formRange.Copy
formRange.Offset(1, 0).Resize(.Range("D" & _
.Rows.Count).End(xlUp).Row - 1).PasteSpecial xlPasteFormulas
End With
如前所述,您不能更改数组的一部分。所以试试这个:
Dim formRange As Range, arrForm As String
With Sheets("Sheet1")
Set formRange = Range(.Range("G2"), _
.Range("O2").End(xlToRight))
arrForm = formRange.FormulaArray
formRange.ClearContents
formRange.Resize(.Range("D" & _
.Rows.Count).End(xlUp).Row - 1).FormulaArray = arrForm
End With
顺便说一句,请注意我在这行中添加的额外点:
formRange.Resize(.Range("D" & _
.Rows.Count).End(xlUp).Row - 1).FormulaArray = arrForm
我假设您属于同一页的D列。如果只是多个范围内的一个数组公式输出,则上述方法有效。
如果每个单元格具有不同的数组公式,则只需在代码中添加偏移量,如下所示:
With Sheets("Sheet1")
Set formRange = Range(.Range("G2"), _
.Range("O2").End(xlToRight))
formRange.Copy
formRange.Offset(1, 0).Resize(.Range("D" & _
.Rows.Count).End(xlUp).Row - 1).PasteSpecial xlPasteFormulas
End With
我遵循逻辑,但我不能完全让它发挥作用。
newRange
给了我对象所需的错误。您需要定义newRange,请将Dim newRange作为Range放在代码的顶部。嗯,我定义了它,但它仍然出错。午饭后我会想办法的!是的,我有语法可以用,但它只是粘贴值。不确定是什么意思您可以尝试在FormarRange
前面加一个等号:newRange.FormulaArray=“=”&formRange
。你在语法上做了什么修改使其正确?我遵循逻辑,但我不能完全让它工作。newRange
给了我对象所需的错误。您需要定义newRange,请将Dim newRange作为Range放在代码的顶部。嗯,我定义了它,但它仍然出错。午饭后我会想办法的!是的,我有语法可以用,但它只是粘贴值。不确定是什么意思您可以尝试在FormarRange
前面加一个等号:newRange.FormulaArray=“=”&formRange
。你在语法上做了什么修改使其正确?我遵循逻辑,但我不能完全让它工作。newRange
给了我对象所需的错误。您需要定义newRange,请将Dim newRange作为Range放在代码的顶部。嗯,我定义了它,但它仍然出错。午饭后我会想办法的!是的,我有语法可以用,但它只是粘贴值。不确定是什么意思您可以尝试在FormarRange
前面加一个等号:newRange.FormulaArray=“=”&formRange
。你在语法上做了什么修改使其正确?我遵循逻辑,但我不能完全让它工作。newRange
给了我对象所需的错误。您需要定义newRange,请将Dim newRange作为Range放在代码的顶部。嗯,我定义了它,但它仍然出错。午饭后我会想办法的!是的,我有语法可以用,但它只是粘贴值。不确定是什么意思您可以尝试在FormarRange
前面加一个等号:newRange.FormulaArray=“=”&formRange
。您对语法做了哪些更改以使其正确?您的代码所做的是在相同的范围内复制和粘贴。因此,如果formRange.Resize(…)
的结果大于1行(因为您正在调整该行的大小,而不是偏移或任何东西),它将抛出下标,因为Excels规则规定您不能更改数组的一部分。您的代码所做的是复制并粘贴在相同的范围内。因此,如果formRange.Resize(…)
的结果大于1行(因为您正在调整该行的大小,而不是偏移或任何东西),它将抛出下标,因为Excels规则规定您不能更改数组的一部分。您的代码所做的是复制并粘贴在相同的范围内。因此,如果formRange.Resize(…)
的结果大于1行(因为您正在调整该行的大小,而不是偏移或任何东西),它将抛出下标,因为Excels规则规定您不能更改数组的一部分。您的代码所做的是复制并粘贴在相同的范围内。因此,如果formRange.Resize(…)
的结果大于1行(因为您正在调整该行的大小,而不是偏移或任何东西),它将抛出下标,因为Excels规则规定您不能更改数组的一部分。