【问题标题】:Insert Row in VBA在 VBA 中插入行
【发布时间】:2020-01-04 18:33:11
【问题描述】:

我正在尝试在 Excel 中创建一个循环,以在 A 列中的值发生变化时插入整行。它通过循环一次并且运行良好。它像假设的那样插入行,但是当它循环并且值再次更改时,它会直接跳转到 end sub 而不是插入新行。我试图以多种方式做到这一点。

下面是我制作的简单循环,看看它是否有效。此代码自下而上运行。

Do Until ActiveCell = ""

    If ActiveCell.Value <> ActiveCell.Offset(-1, 0).Value Then
    ActiveCell.EntireRow.Insert
    ActiveCell.Offset(-1, 0).Select
    Else
    ActiveCell.Offset(-1, 0).Select
End If
Loop

【问题讨论】:

  • 一行在什么?这是Excel吗?如果是这样,您应该适当地标记它。
  • 哦,是的。对不起。谢谢你告诉我。
  • 这段代码的上下文是什么,是什么触发的?请提供几行示例数据,这段代码之前和之后应该是什么,以及实际结果是什么。
  • Brandon,你明白我为什么问你你的代码在什么上下文中运行吗?例如,Sub 名称是什么?是什么触发了代码运行(如果不是事件,可以由Sub 名称确定)?像 f.ex 这样的事件。 Worksheet_Change,还是别的什么?你明白我为什么要你提供一些样本数据(在 A 列,因为其他的并不重要),只是大约 4 或 5 个单元格的任何文本或数字。这些数据在您的代码运行之前是什么样子,在您的代码运行之后是什么样子,以及您期望它是什么样子(如果它不同的话)
  • 到目前为止,您已收到三个答案。你所问的所有信号都不确定。它们都包含诸如 ...假设您正在使用...我假设......这样的短语正在尝试...。这些答案都没有给你一个明确的答案,因为你没有解释你的问题的细节。然而,我知道这个问题很容易解决,只要你能清楚地描述你的问题。 Stack Overflow 的想法是提出详细的问题,并找到答案。问题和答案对未来的读者也很有用。

标签: excel vba insert row


【解决方案1】:

在我看来,您正试图规避Change 事件。我建议阅读the documentation,尤其是Worksheet_Changedocumentation。如果您尝试实施 Change 事件但仍然遇到问题,我建议您编辑您的原始问题以提供更清晰的信息并提供更多信息。

【讨论】:

    【解决方案2】:

    我假设这个循环是一段更大的代码的一部分。如果是这样,请确保代码返回到工作表的底部(或所需的任何位置)。由于您告诉循环在一个空单元格处停止,因此再次运行代码而不重置 activecell 的位置将自动找到并清空单元格并退出循环。

    正如您所说,添加空白行的实际代码本身运行良好,因此查看它周围的代码是有意义的。

    【讨论】:

    • 它一直有效,直到它第二次点击“ActiveCell.EntireRow.Insert”,然后它跳转到结束子。
    【解决方案3】:

    @Bradon 我可以看到您的代码,它可能会进入无限循环[假设您使用 WorkSheet_Change 事件来捕获工作表中的任何更改] 工作表中的任何更改都会触发 WorkSheet_Change 事件;在您的情况下,将行插入工作表会触发 Worksheet_Change 事件

    如果可能,我会建议您发布整个代码 或者 改变你的代码如下[仍然假设你正在使用 WorkSheet_Change 事件]

    添加新工作表说“配置”,并且只有一次手动将 A1 值设置为“真”

    在工作表更改事件中使用 if 条件

    if Sheets("Config").Range("A1").Value = "True" then
    call MyProcedure
    end if
    

    在程序中

    sub MyProcedure()
    Sheets("Config").Range("A1").Value = "False"
    your Do while loop here
    Sheets("Config").Range("A1").Value = "True"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2017-07-24
      • 2018-03-25
      相关资源
      最近更新 更多