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

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

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

我知道我可以简单地改变ListObject.ListColumns(1).DataBodyRange对象的公式 – 但是这将覆盖之前input的任何手动值 – 而在UI中更改公式将离开这个原封不动的…

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

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

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

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

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

您可以先手动尝试以下内容,看看它是否适用于您。 手工代码仍然被代码级取代,然后在代码级执行此操作。 🙂

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

转到 – >工具菜单 – >单击自动更正选项 – >在自动更正选项卡 – >

1- 防止所有自动更正

键入时清除“ Replace Text as you type ”checkbox

2- 防止具体更正

清除该选项的相应checkbox。 我相信你对后一种特定的数据范围更感兴趣,你只需要通过listobject转储数据。


现在这里是在代码级别禁用此function的代码。

使用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 Application.AutoCorrect. AutoFillFormulasInLists在ListObject级别的表格基础上进行控制。 所以这里是一个解决方法。

所以一种方法是每次清理你的表格数据。 而当你清除数据,你可以确保TABLE TO FORGET论坛和格式。 因此,在删除表格内容之前,将清除数据主体范围的内容。

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

当你input数据时,从自动填充开始。