如果我手动在Excel表格(即ListObject)的某个列中输入一个公式,AutoCorrect会将此公式应用于整个列。
是否有办法通过VBA控制此行为,即我是否可以修改/删除/添加此公式?
我知道我可以简单地更改ListObject.ListColumns(1).DataBodyRange对象的公式 - 但这将覆盖之前手动输入的任何值 - 而在UI中更改公式将保持其原样...
如果我手动在Excel表格(即ListObject)的某个列中输入一个公式,AutoCorrect会将此公式应用于整个列。
是否有办法通过VBA控制此行为,即我是否可以修改/删除/添加此公式?
我知道我可以简单地更改ListObject.ListColumns(1).DataBodyRange对象的公式 - 但这将覆盖之前手动输入的任何值 - 而在UI中更改公式将保持其原样...
多亏了Doug和bonCodigos的评论/答案,我找到了简单的答案:
ListObject.ListColumns("Column name").DataBodyRange.FormulaR1C1 = "new formula"
这将覆盖任何手动值(就像自动更正的正常行为一样)。
现在这里是禁用此功能的代码。
在使用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)
您可能想要在我们的列表对象顶部使用的代码是:
Application.AutoCorrect.AutoFillFormulasInLists = False
完全同意,如果Application.AutoCorrect.AutoFillFormulasInLists
可以在ListObject级别上控制每个表格,那将会更加有用。所以这里有一个解决方法。
一种方法是每次清除表格数据。当您清除数据时,可以确保对于要忘记公式和格式的表格进行清除。因此,在删除表格内容之前,它将清除数据主体范围的内容。
Sub forgetMe()
With Sheet1.ListObjects("myTable")
If Not .DataBodyRange Is Nothing Then
.DataBodyRange.ClearContents
.DataBodyRange.Delete
End If
End With
End Sub
当您输入数据时,请关闭自动填充功能。
listObject.ListColumns(“Column name”)。DatabodyRange.FormulaR1C1
即可... - Peter Albert