添加行时MS Excel自动填充不正确的公式

时间:2014-02-03 23:29:13

标签: excel excel-vba excel-formula vba

我已在Excel 2010中将一系列单元格定义为表格。我保护表格不受影响,以便其他用户不会错误地更改公式。我必须使用绑定按钮的宏来允许其他用户在工作表被锁定时添加行。但是,我注意到当我通过按钮添加行时,它会自动填充第I列中的错误公式。这是我最初输入但稍后更改的公式。我还注意到,当我解锁工作表并简单地向下拖动表格的右下角时,它会将正确的公式放在某些行中,而将错误的公式放在其他行中,甚至交替哪些行具有正确的公式。

  

您可能需要回答的其他信息:

  • 表格包括A列到I列
  • 第I栏目前的公式是: =IF(G21=0," ",IF(G21="yes",I20+D21+H21,D21+(I20-F21)))
  • 第I栏中不再使用旧公式: =IF(G24=0," ",IF(G24="yes",F20+H24,F20-F24))
  • 使用的宏是:

 Sub AddRow()

        ActiveSheet.Unprotect Password:="secret"

        Range("A1").End(xlDown).ListObject.ListRows.Add AlwaysInsert:=False

        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="secret"

 End Sub

6 个答案:

答案 0 :(得分:1)

这是有效的:

  • 在“开发人员”选项卡上,单击“录制宏”。
  • 命名宏并输入说明,然后单击“确定”。
  • 解锁表格,
  • 选择总计行
  • 右键单击并选择“在上方添加一行”,
  • 选择Totals行上方的第I列中的最后一个单元格,然后单击Ctrl + D
  • 锁定表格。

    宏的VBA代码如下所示:

    Sub AddRowAndCopyFormula()
    '
    ' AddRowAndCopyFormula Macro
    ' Add one new row and copy correct formula in Column I.
    '

    ' ActiveSheet.Unprotect Range("Table3[#Totals]").Select Selection.ListObject.ListRows.Add (17) Range("I24").Select Selection.FillDown ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowFormattingCells:=True End Sub

    感谢所有帮助我实现这一目标的人!

  • 答案 1 :(得分:0)

    您能详细说明插入行中公式的确切错误吗?这些行是否被错误引用?

    作为潜在的解决方法,您可以在此行添加以重新填充公式吗?

    Range("I2:I" & Range("A1").End(xlDown).row).filldown
    

    将I2替换为表中包含公式的第一个单元格

    答案 2 :(得分:0)

    遇到同样的问题,我的解决方案是: 复制正确的公式,这样您就不必再次输入并将其粘贴到安全的地方。 删除有问题的整个表列。将一列重新插入该点。抓住该配方并将其粘贴回来并适当填充色谱柱。这对我有用。我猜这个列有一些格式或某些东西

    答案 3 :(得分:0)

    我通过以下方式解决了这个问题:

    根据需要在表的第一行 WORKSHEET 中插入尽可能多的新行,并在其中填充数据。

    没有问题了。

    这是一个STUPID错误,应该在looooong之前修复。当MS不在乎这样的主要错误时,一个不好的信号预示着Excel的未来。

    迪克

    答案 4 :(得分:0)

    对其他人的回答类似,但最近2个小时我一直在用这种方法梳理头发。

    我将正确的公式(在我的情况下,它在第1行中)复制到了表格不相邻的单元格中。然后删除具有正确和错误公式的所有列单元格-仅使用Delete键即可。然后从以前复制到的单元格中复制回公式。现在,插入时自动填充可以使用正确的公式

    非常奇怪的错误。...

    答案 5 :(得分:0)

    我用一个简单的方法解决了这个问题(不需要创建新列或类似的):

    • 复制公式(使用正确的代码)。
    • 选择整列,然后点击“主页”选项卡,点击清除选项(Clear All)。
    • 只需粘贴代码即可。而已。为我工作。

    希望有所帮助(它对我有用)。