通过VBA在Excel Listobject / Table中添加/修改/删除计算列公式

时间:2012-12-06 22:12:08

标签: excel excel-vba listobject excel-tables vba

如果我手动将公式输入Excel表格中的列(即ListObject),则自动更正将此公式应用于整个列。

有没有办法通过VBA控制这种行为,即我可以以某种方式修改/删除/添加此公式吗?

我知道我可以简单地更改ListObject.ListColumns(1).DataBodyRange对象的公式 - 但这将覆盖之前输入的任何手动值 - 而更改UI中的公式将保持不变...

2 个答案:

答案 0 :(得分:12)

感谢Doug和bonCodigos的评论/答案,我找到了简单的答案:

ListObject.ListColumns("Column name").DataBodyRange.FormulaR1C1 = "new formula"

这将覆盖任何手动值(就像使用自动更正的正常行为一样)。

答案 1 :(得分:1)

如果您能向我们展示您的工作表的屏幕截图,那将是最好的。基于此,我们将阐明答案。

这是一般假设。您有一个列表对象将一些数据转储到列,并且该列中的其余单元格是手动交互的。

您可以先手动尝试以下操作,看看它是否适合您。仍然手动的一个被代码级别所取代,然后你在代码级别执行此操作。 :)

此处的主要操作是停止自动更正

转到 - >工具菜单 - >点击自动更正选项 - > 在“自动更正”选项卡中 - >

1- 防止所有自动更正

清除Replace Text as you type

的复选框

2- 防止特定更正

清除该选项的相应复选框。我相信你对后者 - 你只是通过listobject转储的特定数据范围更感兴趣。


现在,这是在代码级别禁用此功能的代码。

使用Excel Tables(ListObjects)时,需要考虑两个自动更正选项:您可以详细了解这两个选项。

* Apply new rows and columns in table 
  (VBA AutoCorrect.AutoExpandListRange Property)
* Fill formulas in tables to create calculated columns 
 (VBA AutoCorrect.AutoFillFormulasInLists Property) 

您可能希望在我们的列表对象顶部使用的代码是,

Application.AutoCorrect.AutoFillFormulasInLists = False

并且完全同意,如果Application.AutoCorrect. AutoFillFormulasInLists在ListObject级别逐个表地控制,那将会更有用。所以这是一个解决方法。

所以一种方法是每次清除表格数据。当您清除数据时,您可以确保TABLE FOR FORGET forumulae和格式。因此,在删除表格内容之前,它将清除数据体范围的内容。

Sub forgetMe()
   With Sheet1.ListObjects("myTable")
      If Not .DataBodyRange Is Nothing Then
         .DataBodyRange.ClearContents
         .DataBodyRange.Delete
      End If
   End With

End Sub

输入数据时,请先关闭自动填充功能。