gpt4 book ai didi

excel - 如何使用查找功能激活找到的单元格?

转载 作者:行者123 更新时间:2023-12-04 21:54:41 24 4
gpt4 key购买 nike

我正在尝试创建一个宏,它将找到包含特定值(例如:位置)的每个单元格,然后删除该单元格的整行。将有多个包含该值的单元格,我希望将它们全部删除,因此我创建了一个循环,但是由于我的操作方式,它在最后一个单元格之后中断并且它不会继续进行最后一位的宏。我找不到其他方法,所以我希望有人会比我更聪明,并且可以帮助我解决这个问题。代码现在看起来像这样:

  Do
If Cells.Find(What:="Location").Activate Then
ActiveCell.EntireRow.Select
Selection.Delete
Else MsgBox ("All headers deleted")
End If
Loop

最佳答案

你其实很接近。以下是如何使其工作,并进行一些小的“不必要但仍然很好”的改进:

Sub test()
Dim rng As Range
Do
Set rng = Cells.Find(What:="b")
If Not rng Is Nothing Then
rng.EntireRow.Delete
Else
MsgBox ("All headers deleted")
Exit Do
End If
Loop
End Sub

我添加 Range 的原因对象并在我们输入 If 之前声明它循环主要是为了可读性,但也因此我们不尝试使用 .Find几次。这不太可能产生重大影响 - 编译器可能会自行修复此问题。无论如何,在代码中明确说明它并没有什么坏处。

删除最后一个实例后出现错误的原因是代码尝试 .Activate一个空的范围。不允许此操作。一种解决方案,即我在这里所采用的解决方案,是在尝试调用其任何成员之前检查范围对象是否有效。如果对象无效,循环将完全跳过它,我们不会收到任何错误。它的工作方式是, Range.Find返回 Nothing (这是一个有效的对象状态)如果它没有找到任何东西。你会在我的代码中看到我告诉编译器只有在 rng 时才进入循环。不包含 Nothing .

我还删除了所有 .Select调用,因为它是 not good practice .最佳实践是显式声明所有变量并直接在范围上工作。生成的代码也更短且更易于阅读。

最后的编辑是添加 Exit Do在您的 Else条款。这是非常必要的,因为您没有在 Do ... Loop 中添加任何中断条件。 .没有 Exit Do某处,程序会折腾 MsgBox在你永远。

也可以从 Exit Do 移动。到更强大的 Do ... Loop with conditions - 它可能看起来像这样:
Sub test()
Dim rng As Range
Do
Set rng = Cells.Find(What:="b")
If Not rng Is Nothing Then
rng.EntireRow.Delete
Else
MsgBox ("All headers deleted")
End If
Loop While (Not rng Is Nothing)
End Sub

关于excel - 如何使用查找功能激活找到的单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47348664/

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