gpt4 book ai didi

vba - 确定何时在 Excel VBA 中插入或删除行/单元格

转载 作者:行者123 更新时间:2023-12-04 19:59:56 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Determine whether user is adding or deleting rows

(7 个回答)


6年前关闭。




我试图弄清楚如何确定在 期间使用 VBA 在 Excel 中插入或删除行(或列)的时间。 Worksheet_Change 事件并遇到了话题here .但是,那里给出的建议答案并没有完全捕获在工作表上插入或删除行时的所有实例,包括:

  • 虽然它们捕获插入或删除 ENTIRE 行的实例,但它们不会捕获仅插入或删除一组单元格的实例,这些单元格在下方或上方向下或向上移动。
  • 虽然它们捕获在 USEDRANGE 中插入或删除的行的实例,但它们不会捕获您在使用范围之外插入的实例(例如,在您输入数据的位置下方插入一行)。

  • 鉴于上述陈述,我搜索了更多选项,但找不到任何选项。然后,我想出了我自己的解决方案,我在这里提供它来帮助其他人。同时我也希望能得到关于任何缺陷或改进领域的反馈。

    最佳答案

    下面的 Excel VBA 代码将确定用户是否插入或删除了整个行或单元格组(向上或向下移动单元格),所有这些都在使用范围之内或之外。

    这是代码(也可以转换为列):

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Cells(Target.Row + Target.Rows.Count, Target.Item(1, 1).Column).ID = Target.Address
    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Item(1, 1).ID <> "" Then
    MsgBox "deleted row"
    Else
    MsgBox "inserted row"
    End If
    Target.Item(1, 1).ID = ""
    Cells(Target.Row + Target.Rows.Count, Target.Item(1, 1).Column).ID = Target.Address
    End Sub

    它实际上非常简单,并使用单元格标记来跟踪用户操作,然后您可以使用这些操作来确定是否发生了插入或删除。

    “等待?!”你可能会说。 “有办法标记细胞吗?”或者...“什么是单元格标记”。

    好吧,单元格确实没有“标记”属性,但是您可以改进“Cell.ID”属性并将其用作单元格的标记。 “Cell.ID”属性的初衷是在将 Excel 文件保存为 web 表单时使用,但如果您不打算创建 web 表单,它也可以作为标签使用。唯一的缺点是当您关闭并保存文件时,您无法将其值与工作簿一起保存。但是,这没关系,因为您无论如何都不需要保存标签值。

    无论如何,我认为它运作良好。但是,如果您发现任何需要改进或缺陷的地方,请告诉我。

    我能想到的唯一问题是,当您单击时,它会不断地标记单元格,如果您最终没有对单元格进行更改,则会留下大量剩余的垃圾。但是,这不会在您关闭工作簿时保存,而只会在文件打开时发生。

    关于vba - 确定何时在 Excel VBA 中插入或删除行/单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35978015/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com