Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用VBA复制和粘贴数组公式_Excel_Vba - Fatal编程技术网

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规则规定您不能更改数组的一部分。