9

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

有什么方法可以通过 VBA 控制这种行为,即我可以以某种方式修改/删除/添加这个公式吗?

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

4

2 回答 2

19

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

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

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

于 2012-12-07T10:06:14.017 回答
1

最好是您可以向我们展示您的工作表的屏幕截图。基于此,我们将明确给出答案。

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

您可以先手动尝试以下方法,看看它是否适合您。手动的仍然被代码级别所取代,然后您在代码级别执行此操作。:)

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

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

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

当您输入数据时,从自动关闭开始。

于 2012-12-07T06:21:36.567 回答