2014-10-18 64 views
1

背景: 我已经创建了包含创建,其保持在所述第一尺寸的项目名称和在第二维一个目标标题的阵列的例行程序的Word模板。此数组转换为Excel中的表格,用于创建时间轴/甘特图。Excel中的ListObject表中插入行导致细胞公式误差

问题: 转置适当地放置在阵列信息到Excel表,并根据需要扩大该表的大小。单元格B5是DataBodyRange的开始和我想要粘贴数组信息的开始位置。

' paste headings from array into excel 
xlWS.Range("B5:C" & UBound(gHeadings, 2)) = xlApp.Transpose(gHeadings) 

什么不以适当的方式发生在表中的后续数据单元格中。时间轴细胞具有以下公式:

=IF(AND(COLUMNS($H$5:H10)>=$E5,COLUMNS($H$5:H10)<=$F5),IF(COLUMNS($H$5:H10)-$E5<ROUND(($F5-$E5+1)*$G5,0),fillblock,""),"") 

当转置完成,包含上是DataBodyRange原来最后一排表的行引用的公式错误细胞的一行。

=IF(AND(COLUMNS($H$5:H119)>=$E10,COLUMNS($H$5:H119)<=$F10),IF(COLUMNS($H$5:H119)-$E10<ROUND(($F10-$E10+1)*$G10,0),fillblock,""),"") 

任何想法或为什么发生这种情况的了解,以及如何预防:在该行,行10,公式会从什么上面显示的改变?

+0

确切的问题有点不清楚。公式是否改变了唯一的问题?如果没有,请详细说明。关于公式,你是不是可以在你不想改变的零件前加'$'? (例如,您不希望H10更改为H119,因此将其更改为$ H $ 10)如果这不是一个选项,您能否提供您的代码正在处理的完整程序,甚至是一些阵列数据的示例? – 2014-10-19 04:26:25

+0

我对任何混乱表示歉意。让我试着澄清。将数组转换为表格会自动将行插入表格中。上面显示的这部分代码按预期工作。问题是这样的:该模板已经在单元格的列H开始有单元格公式。当新行被插入带有转置的表格中时,这些公式应该被复制到所有新行。所有插入行都会出现这种情况,除了所示的行之外。出于某种原因,Excel将此行的引用更改为指向表的最后一行 – 2014-10-19 12:22:11

回答

0

总的答案,为什么Excel表格中我所描述的方式工作没有回答。但是,这是我的解决方法。速度命中可以忽略不计。

' variable to hold the formula and fix the double-quote ("") issue in vba 
     sEmpty = Chr(34) & Chr(34) 
     sFormula = "=IF(AND(COLUMNS($H$5:H5)>=$E5,COLUMNS($H$5:H5)<=$F5),IF(COLUMNS($H$5:H5)-$E5<ROUND(($F5-$E5+1)*$G5,0),fillblock," & sEmpty & ")," & sEmpty & ")" 

    ' paste cell formula into the new worksheet 
     lTblRows = xlLO.DataBodyRange.Rows.Count 
     xlWS.Range("H5:AK" & lTblRows + 4).Formula = sFormula 

这有效地将公式复制到表中引用的每个小区,复制了那些致使误引用的行的插入过程中的细胞。