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