如果我在 Excel 表(即 ListObject)的列中手动输入公式,自动更正会将此公式应用于整个列。
有什么方法可以通过 VBA 控制这种行为,即我可以以某种方式修改/删除/添加这个公式吗?
我知道我可以简单地更改ListObject.ListColumns(1).DataBodyRange
对象的公式 - 但这将覆盖之前输入的任何手动值 - 而在 UI 中更改公式将保持不变......
如果我在 Excel 表(即 ListObject)的列中手动输入公式,自动更正会将此公式应用于整个列。
有什么方法可以通过 VBA 控制这种行为,即我可以以某种方式修改/删除/添加这个公式吗?
我知道我可以简单地更改ListObject.ListColumns(1).DataBodyRange
对象的公式 - 但这将覆盖之前输入的任何手动值 - 而在 UI 中更改公式将保持不变......
感谢 Doug 和 bonCodigos 的评论/答案,我找到了简单的答案:
ListObject.ListColumns("Column name").DataBodyRange.FormulaR1C1 = "new formula"
这将覆盖任何手动值(就像使用自动更正的正常行为一样)。
最好是您可以向我们展示您的工作表的屏幕截图。基于此,我们将明确给出答案。
这是一般假设。您有一个列表对象可以将一些数据转储到一列,并且该列中的其余单元格是手动交互的。
您可以先手动尝试以下方法,看看它是否适合您。手动的仍然被代码级别所取代,然后您在代码级别执行此操作。:)
这里的主要操作是停止自动更正
转到->工具菜单->单击自动更正选项->在自动更正选项卡中->
1-防止所有自动更正
清除复选框Replace Text as you type
2-防止特定的更正
清除该选项的相应复选框。我相信您对后者更感兴趣 - 您只是通过 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)
您可能想在我们的列表对象顶部使用的代码是,
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
当您输入数据时,从自动关闭开始。