【发布时间】:2013-06-10 18:28:07
【问题描述】:
有没有人遇到过 Excel 似乎在操纵您的公式的情况。 我有一张工作表,其中在 A 列中有一个索引值。第一行以任何非零值开头。列中的后续行递增该值。例如
A1 = 1000
A2= A1+ 1
A3= A2 + 1
等等/ 我有另一列 B,其值要么为空白,要么为指向 A 列的公式(通常是后续行) 例如:
B1.Formula = "=A2"
B2.Formula = "=A3"
B3.Value = ""
B4.value = "=A6"
现在我有一个备份-恢复功能,可以让我将数据/公式写到一个文本文件中,然后在另一个工作簿中读回。 对于 A 列和 B 列,我正在检查文本值是否以“=”开头,然后根据是否存在公式来设置该单元格的值或公式。
到目前为止,该功能运行良好。它让我准确还原。
现在,如果我将此数据范围转换为表格并相应地修改代码,则行为很奇怪。我正在使用 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"
当我使用表格而不是范围时,为什么我的公式值都变为相同的值?
【问题讨论】:
-
澄清一下:
Sheets("MySheet").ListColumns("Next")不应该是Sheets("MySheet").ListObjects(1).ListColumns("Next")? -
感谢@PeterAlbert指出错误
-
这篇文章Formulas and Structured Data in Excel Tables 说“转换为表格的好处在于,当我向表格中添加更多数据时,公式会自动为我复制下来。如果我更改此公式,那么Excel 会自动将更改复制到列中的所有行。无论我更改列顶部的第一个单元格还是更改中间的单元格,列中的所有行都会被修改。我不确定如何改变这种行为。
标签: excel vba excel-2010 listobject