Excel VBA更改我的公式在表中?

有没有人遇到的情况,Excel似乎操纵你的公式。 我有一个工作表,其中A列中有一个索引值。第一行以任何非零值开始。 列中的后续行增加值。 例如

A1 = 1000 A2= A1+ 1 A3= A2 + 1 

等/我有另一列B的值将是空白或公式指向列A(通常是后续行)例如:

 B1.Formula = "=A2" B2.Formula = "=A3" B3.Value = "" B4.value = "=A6" 

现在我有一个备份还原function,可以将数据/公式写入文本文件,然后在另一个工作簿中读取。 在列A和B的情况下,我正在检查文本值是否以“=”开始,然后根据是否存在公式来设置该单元格的值或公式。

到目前为止,function工作正常。 它让我准确地恢复。

现在,如果我将这个数据范围转换成一个表并修改相应的代码,这个行为就很奇怪了。 我正在使用ListObject结构来引用表。 所以对于列B我的恢复代码是:

  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 

一旦我写了一行,我循环到开始和

 Dim newRow AS listrow Set newRow = Sheets("MySheet").Listrows.Add(AlwaysInsert:=False) row = newRow.Index 

但这一次,当我运行的过程。 这是我得到的:

 B1.Formula = "=A5" B2.Formula = "=A5" B3.Value = "" B4.value = "=A5" 

为什么我使用表格而不是范围时,我的公式值都变为相同的值?

我面临类似的问题。 理想情况下,你可以告诉excel停止这样做,但我一直无法弄清楚如何。 据说做下面的事情应该保持excel复制公式:

xlApp.AutoCorrect.AutoFillFormulasInLists = false

但它对我没有用。

使用这个问题的答案如何使用Excel表结构化引用创build运行总计? 帮助过我。 它不是理想的解决scheme,但它确实做到了这一点。

我使用这个公式,其中Weight是我的表中的列名。 #This Row是“特殊项目说明符”,具有特殊的含义。 语法看起来有点时髦,因为这就是所谓的结构化参考 :

=AVERAGE(INDEX([Weight],1):[[#This Row],[Weight]])

INDEX([Weight],1)部分给出Weight列中第一行的参考

[[#This Row],[Weight]]部分给出了Weight列中当前行的参考。

例如,如果Weight是J列,而当前行是7,那么这相当于

=AVERAGE(J1:J7)

而在第8排这将相当于

=AVERAGE(J1:J8)等等