如果我手动将公式输入Excel表格中的列(即ListObject),则自动更正将此公式应用于整个列。
有没有办法通过VBA控制这种行为,即我可以以某种方式修改/删除/添加此公式吗?
我知道我可以简单地更改ListObject.ListColumns(1).DataBodyRange
对象的公式 - 但这将覆盖之前输入的任何手动值 - 而更改UI中的公式将保持不变...
答案 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
输入数据时,请先关闭自动填充功能。