Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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 数组公式和特殊:=格式_Excel_Excel 2007_Array Formulas_Vba - Fatal编程技术网

Excel 数组公式和特殊:=格式

Excel 数组公式和特殊:=格式,excel,excel-2007,array-formulas,vba,Excel,Excel 2007,Array Formulas,Vba,我有一本小册子。我想通过使用数组公式简单地构造一个很长的函数。该公式运行良好,产生了预期的结果。但是,在我的VBA宏中,我先复制,然后粘贴公式,再粘贴格式。格式粘贴崩溃:“无法粘贴,因为复制和粘贴区域大小不同”(或类似于此)。如果我使用任何其他不是数组公式的公式,这个问题就解决了 以前是否有人经历过这种情况并找到了合适的解决方案?我似乎无法在谷歌上找到答案。如果需要的话,我会发布代码,但它非常简单(Row.Copy…Rows(something,something).PasteSpecial…)

我有一本小册子。我想通过使用数组公式简单地构造一个很长的函数。该公式运行良好,产生了预期的结果。但是,在我的VBA宏中,我先复制,然后粘贴公式,再粘贴格式。格式粘贴崩溃:“无法粘贴,因为复制和粘贴区域大小不同”(或类似于此)。如果我使用任何其他不是数组公式的公式,这个问题就解决了

以前是否有人经历过这种情况并找到了合适的解决方案?我似乎无法在谷歌上找到答案。如果需要的话,我会发布代码,但它非常简单(
Row.Copy…Rows(something,something).PasteSpecial…
),并且可以使用非数组公式

编辑:代码:

 sRapDetail = "rap - détails"

    Sheets(sRapDetail).Select
    iStart = 17
    iFormuleExceptionRNIAC = 13
    iFormule1 = 14
    iFormule2 = 15
    iFormuleExceptionAR = 16
    range(Rows(iStart - 1), Rows(1000)).Hidden = False

    iLastRow = Cells(65535, "B").End(xlUp).Row
    range("A" & iStart & ":AL" & iLastRow).Select
'    selection.Borders(xlInsideVertical).LineStyle = xlNone
'    selection.Borders(xlEdgeBottom).LineStyle = xlNone
    selection.Delete Shift:=xlUp

    'RNIAC
    Sheets("Zoom0").Select

    If Cells(21, "B").Value = "" Or Cells(22, "B").Value = "" Then
        iLastRow = 21
    Else
        iLastRow = Cells(21, "B").End(xlDown).Row
    End If
     iNbRow = iLastRow - 20

    Sheets(sRapDetail).Select
    Rows(iFormuleExceptionRNIAC).Select
    selection.Copy
    range(Rows(iStart), Rows(iStart - 1 + iNbRow)).Select
    selection.PasteSpecial xlPasteFormulas
    selection.PasteSpecial xlPasteFormats

(是的,我知道
选择的用法很难看(或者至少在本例中是这样),但这是一位同事写的)

出现问题的原因是您无法复制数组公式本身

例如,如果在单元格A1中有一个数组公式,并且希望将其复制到单元格A10,则不能复制A1并高亮显示A1:A10并粘贴。这行不通。您必须复制A1,然后突出显示A2:A10

也就是说,问题很可能存在于这样一个事实中,即
行(iFormuleExceptionRNIAC)
中的行可能与该
范围(行(iStart),行(iStart-1+行内))相交。


如果可以确保它们不相交,则复制数组公式将起作用。

出现此问题的原因是无法将数组公式复制到其自身之上

例如,如果在单元格A1中有一个数组公式,并且希望将其复制到单元格A10,则不能复制A1并高亮显示A1:A10并粘贴。这行不通。您必须复制A1,然后突出显示A2:A10

也就是说,问题很可能存在于这样一个事实中,即
行(iFormuleExceptionRNIAC)
中的行可能与该
范围(行(iStart),行(iStart-1+行内))相交。



如果你能确保它们不相交,复制数组公式就行了。

你能发布你的代码吗?我刚刚录制了一个宏,它复制了一个数组公式,然后粘贴特殊的公式,然后粘贴特殊的格式,效果很好。。。。。。我录制了一个宏,它工作得很好,而你的代码(虽然在一些不同的方面很奇怪)似乎没有告诉我为什么它会在特殊的一行中断。。。我不知道该告诉你什么…最后一个想法:你确定当你所替换的只是复制的单元格中的数组公式时,完全相同的代码可以工作吗?没有别的了。。。唯一有意义的是,如果您试图将格式粘贴到合并的单元格或类似的内容中,是的。我将公式改为
1+1
,然后改为类似
ABS(…)+ABS(…)
的旧公式,两种情况都有效。用数组公式替换该公式会导致宏崩溃。我只换了一个单元格。哦,我们不使用合并单元格,因为它们造成的问题比解决的问题多,所以不可能是这样。我知道事实上没有合并的单元格。你能发布你的代码吗?我刚刚录制了一个宏,它复制了一个数组公式,然后粘贴特殊的公式,然后粘贴特殊的格式,效果很好。。。。。。我录制了一个宏,它工作得很好,而你的代码(虽然在一些不同的方面很奇怪)似乎没有告诉我为什么它会在特殊的一行中断。。。我不知道该告诉你什么…最后一个想法:你确定当你所替换的只是复制的单元格中的数组公式时,完全相同的代码可以工作吗?没有别的了。。。唯一有意义的是,如果您试图将格式粘贴到合并的单元格或类似的内容中,是的。我将公式改为
1+1
,然后改为类似
ABS(…)+ABS(…)
的旧公式,两种情况都有效。用数组公式替换该公式会导致宏崩溃。我只换了一个单元格。哦,我们不使用合并单元格,因为它们造成的问题比解决的问题多,所以不可能是这样。事实上,我知道没有合并的单元格。如果有机会,我一定会检查。谢谢不。。不幸的是,情况并非如此
iFormuleExceptionRNIAC
为13,
iStart
为17,因此范围不会重叠。我的团队负责人认为这可能与我的MSO服务包有关。
iStart=17
,但如果
iStart-1+iNbRow
的计算结果小于17,则会将您的范围从该点扩大到17。因为
iNbRow=ilastrow-20
这似乎是可能的。我不是说这是肯定的答案,但我确实认为值得再检查一次。执行
调试。在
范围(行(iStart),行(iStart-1+行内))上打印
。在尝试复制之前,请访问
以查看范围。您是对的。今天晚些时候,当我有机会的时候,我会更仔细地研究它。我使用了执行窗口,并在它通常崩溃的行上设置了一个断点。复制的行是第13行,目的地仅为第17行(
iStart
iStart-1+iNbRow
都等于17)。如果有机会,我一定会检查这一点。谢谢不。。不幸的是,情况并非如此
iFormuleExceptionRNIAC
为13,
iStart
为17,因此范围不会重叠。我的团队负责人认为这可能与我的MSO服务包有关。
iStart=17
,但如果
iStart-1+iNbRow
的计算结果小于17,则会将您的范围从该点扩大到17。因为
iNbRow=ilastrow-20
这似乎是可能的。我不是说这是肯定的答案,但我确实认为值得再检查一次。执行
调试。在
范围(行(iStart),行(iStart-1+行内)上打印