通过VBA添加/修改/删除计算列式在Excel的ListObject /表(Add/Modify/d

2019-07-04 17:00发布

如果我手动输入一个公式到Excel表格(即的ListObject)的柱,自动更正应用该公式的整列。

有什么办法来控制通过VBA的这一行为,即我可以采用某种修改/删除/添加这个公式?

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

Answer 1:

感谢Doug的和bonCodigos的意见/答案,我找到了答案很简单:

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

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



Answer 2:

最好的是,如果你能告诉我们你的表的屏幕截图。 在此基础上,我们会阐述的答案。

这是与一般的假设。 你有一个列表对象转储一些数据在列的单元格的列和休息手动交互。

你可以尝试下面的手动第一,看看它是否适合你。 还是手动一个是由代码级超车,然后你在代码层面做到这一点。 :)

这里的主要作用是停止自动更正

进入 - >工具菜单 - >点击自动更正选项 - >在自动更正选项卡 - >

1- 要阻止所有自动更正

清除复选框Replace Text as you type

2- 为了防止SPECIFIC更正

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


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

当与Excel表格(ListObjects)有两种自动更正选项考虑工作:你可以阅读有关这两个中的细节。

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

代码可能要在我们的ListObject是顶级的使用,

Application.AutoCorrect.AutoFillFormulasInLists = False

并完全同意,这将是,如果这么多有用的Application.AutoCorrect. AutoFillFormulasInLists Application.AutoCorrect. AutoFillFormulasInLists在的ListObject水平由表基础上的表控制。 因此,这里是一个解决办法。

因此,一种方法是每次清除表中的数据。 当你明确的数据可以确保为表忘记forumulae和格式。 因此,将删除表中的内容之前清除数据体范围的内容。

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

End Sub

当你输入数据,启动具有自动关闭的东西。



文章来源: Add/Modify/delete calculated column formula in Excel Listobject/Table via VBA