在Excel VBA中删除基于FALSE值的行(运行时错误91)

我有一个电子表格,需要删除基于“FALSE”值的行。 研究networking,我发现这个网站的一些代码:

https://www.extendoffice.com/documents/excel/815-excel-remove-rows-based-on-cell-value.html

Sub DeleteRows() Dim rng As Range Dim InputRng As Range Dim DeleteRng As Range Dim DeleteStr As String xTitleId = "Delete Based on Cell Value" Set InputRng = Application.Selection Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address, Type:=8) DeleteStr = Application.InputBox("Delete Text", xTitleId, Type:=2) For Each rng In InputRng If rng.Value = DeleteStr Then If DeleteRng Is Nothing Then Set DeleteRng = rng Else Set DeleteRng = Application.Union(DeleteRng, rng) End If End If Next DeleteRng.EntireRow.Delete '<----- *highlighted error* End Sub 

执行macros后,出现“Runtime 91 object variable not set”错误。

我知道我需要设置“DeleteRng”对象,但我不知道是什么。 我是VBA新手,可能是我忽略的一些小事。

你需要先检查一下DeleteRng包含的东西

 Sub DeleteRows() Dim rng As Range Dim InputRng As Range Dim DeleteRng As Range Dim DeleteStr As String Dim xTitleId As String xTitleId = "Delete Based on Cell Value" Set InputRng = Application.Selection Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address, Type:=8) DeleteStr = Application.InputBox("Delete Text", xTitleId, Type:=2) For Each rng In InputRng If rng.Value = DeleteStr Then If DeleteRng Is Nothing Then Set DeleteRng = rng Else Set DeleteRng = Application.Union(DeleteRng, rng) End If End If Next If Not DeleteRng Is Nothing Then DeleteRng.EntireRow.Delete '<----- *highlighted error* End Sub 

当我testing它时,代码对我来说工作得很好,但是我有一种感觉,我知道当你运行它时发生了什么。 机会是,它不是find您input到您的框中的文本。

尝试在“DeleteRng.EntireRow.Delete”处放置一个断点。 您可以通过单击代码左侧窗口的细灰色栏来完成此操作。

我也将编辑你的代码:

 DeleteRng.EntireRow.Delete '<----- *highlighted error* 

 If Not DeleteRng Is Nothing Then DeleteRng.EntireRow.Delete '<----- *highlighted error* Else msgbox "No rows found!" End If 

这将提供你的对象的逆。 如果这个对象被设置为某个东西,那么反过来就是一无所获。 这将防止您的代码在未设置对象时引发错误。 你也可以删除else语句,但是在else语句中,它会告诉你是否没有设置。

(代表OP发布)

我找出了我的错误! 通过对代码的一些帮助和修改,以及一个build议,我意识到我input的值与返回的值不同,因为它是区分大小写的。

列B在所有大写字母中显示“FALSE”值,但立即窗口显示的值实际上是“False”。 我正确search“假”,它完美的工作!

我也把错误部分改为:

 If Not DeleteRng Is Nothing Then DeleteRng.EntireRow.Delete