Excel VBA changing my formulas in a table?
有没有人遇到过 Excel 似乎在操纵您的公式的情况。
我有一张工作表,其中在 A 列中有一个索引值。第一行以任何非零值开头。列中的后续行递增该值。例如
1 2 3 | A1 = 1000 A2= A1+ 1 A3= A2 + 1 |
等等/
我有另一列 B,其值要么为空白,要么为指向 A 列的公式(通常是后续行)
例如:
1 2 3 4 | B1.Formula ="=A2" B2.Formula ="=A3" B3.Value ="" B4.value ="=A6" |
现在我有一个备份-恢复功能,可以让我将数据/公式写到一个文本文件中,然后在另一个工作簿中读回。
对于 A 列和 B 列,我正在检查文本值是否以 "=" 开头,然后根据是否有公式来设置该单元格的值或公式。
到目前为止,该功能运行良好。它让我准确还原。
现在,如果我将此数据范围转换为表格并相应地修改代码,则行为很奇怪。我正在使用 ListObject 结构来引用该表。所以对于 B 列,我的恢复代码是:
1 2 3 4 5 6 7 | If Left(soureString) ="=" Then 'This is a formula Sheets("MySheet").ListObjects(1).ListColumns("Next").DataBodyRange(row).Formula = sourcestring Else 'This is a value Sheets("MySheet").ListObjects(1).ListColumns("Next").DataBodyRange(row).Value = soureString End If |
写完一行后,我循环到开头,
1 2 3 | Dim newRow AS listrow Set newRow = Sheets("MySheet").Listrows.Add(AlwaysInsert:=False) row = newRow.Index |
但是这次我运行这个过程。这就是我得到的:
1 2 3 4 | B1.Formula ="=A5" B2.Formula ="=A5" B3.Value ="" B4.value ="=A5" |
当我使用表格而不是范围时,为什么我的公式值都变为相同的值?
从 Excel 加载项填充 ListObject(表)时,我遇到了同样的问题,设置
我的解决方法是保存当前设置,将
1 2 3 4 5 6 7 8 9 | bool OriginalAutoFillFormulaInListsFlag = app.AutoCorrect.AutoFillFormulasInLists; app.AutoCorrect.AutoFillFormulasInLists = false; //[ListObject population code....] if (OriginalAutoFillFormulaInListsFlag == true) { app.AutoCorrect.AutoFillFormulasInLists = true; } |
希望这对某人有所帮助。
我发现,当您在 VBA 中插入时,解决 Excel 表格中公式更改问题的唯一方法是在表格的第一行插入,而不是在底部或中间插入。你可以排序。
而且我总是选择或引用
将表格放在自己的工作表中
我遇到了类似的问题。理想情况下,您可以告诉 excel 停止这样做,但我无法弄清楚如何。假设执行以下操作可以防止 excel 复制公式:
但它对我不起作用。
使用这个问题的答案如何使用 Excel 表格结构化引用创建运行总计?帮助过我。它感觉不是理想的解决方案,但确实可以完成工作。
我使用了这个公式,其中
而
例如,如果权重是 J 列,并且当前行是,比如说,7,那么这相当于
并且在第 8 行将等同于