背景: 我创建了一个Word模板,其中包含一个例程,该例程创建一个数组,该数组在第一维中保存Project标题,在第二维中保存Goal标题。此数组转换为Excel中的表格,用于创建时间轴/甘特图。
问题: 转置将数组信息适当地放入Excel表中,并根据需要扩展该表的大小。 Cell 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的原始最后一行。在该行第10行,公式从上面显示的内容更改为:
=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,""),"")
对此为何发生的任何想法或理解,以及如何预防?
答案 0 :(得分:0)
关于为什么Excel Tables以我所描述的方式表现的整体答案没有得到解答。但是,这是我的解决方法。速度命中率可以忽略不计。
' 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
这有效地将公式复制到表中引用的每个单元格中,复制在行插入期间错误引用的单元格。