【问题标题】:Run vba code on the selection of first listRow in excel在excel中选择第一个listRow时运行vba代码
【发布时间】:2015-05-17 05:41:44
【问题描述】:

在最初创建表时,在结构化表中,listRow 为 0。 让我们在Sheet1 中说我们有一个列表对象Table1 我需要运行以下代码: ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1").ListRows.Add AlwaysInsert:=True。 当Table1 没有行并且第一行被单击或单步执行或第一行中的任何单元格(标题后的行)被选中时。

我需要这个,因为除非有至少 1 个列表行,否则受保护工作表中的锁定公式单元格不起作用。

问题解释:

【问题讨论】:

  • 我可以看看你的工作簿吗?
  • @SiddharthRout:为了测试......取消保护工作表并创建第二行,您会发现公式即将到来。保护工作表并尝试输入数量和价格公式将不起作用
  • 我刚刚输入了值,它正在工作。它给了我最后一列的总数
  • 您确定您的计算设置为Automatic 而不是Manual?检查Formulas Tab|Calculation Options

标签: excel vba


【解决方案1】:

发布聊天讨论:

问题在于您创建表格和添加公式以及在删除行后立即保护工作表的方式。您还试图在受保护的工作表上运行代码。

试试这个

表格的创建

我以CellsA1:C1为例

A.在单元格 A1、B1、C1 中,键入“Header1, Header2, Header3”

B.下一步选择 A1:C1 并单击插入 |表格

C.点击复选框“我的表格有标题”

D.接下来在单元格 C2 中,输入公式

=IF([Header1]+[Header2]=0,"",[Header1]+[Header2])`

E.保护工作表,保持 Col C 锁定和 A/B 解锁。

你就完成了。

使用此代码添加新行

Sub Sample()
    With ThisWorkbook.Worksheets("Sheet1")
        .Unprotect 
        .ListObjects("Table1").ListRows.Add AlwaysInsert:=True
        .Protect
    End With
End Sub

请记住,当您通过删除行来重置表格时,请确保在单元格 A2 和 B2 中键入内容,然后在保护表格之前清除单元格,否则您将丢失您的公式。

希望对你有帮助

【讨论】:

  • 对于你的第一个例子..让我们假设在Header4 列中有一个公式,它对header 1, 2 and 3 值求和。 Header4 受到保护和锁定,而 Header 1, 2 and 3 未锁定。当用户输入 Header 1, 2 and 3 的值时,不幸的是,Header4 不会自动计算得出 1、2 和 3 的总和,我不知道为什么。它只会在我添加.ListRows.Add 时计算,这就是为什么我希望每当listRow 为零时,一旦用户触摸该行就运行.ListRows.Add AlwaysInsert:=True
  • 当公式单元格受到保护时,公式不自动计算结构化表格的问题实际上让我发疯。一天前我正在搜索这个,没有人提到过这么奇怪的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多