如果每个工作表中的字符串匹配,则修复删除行

Posted

技术标签:

【中文标题】如果每个工作表中的字符串匹配,则修复删除行【英文标题】:Fix Delete Row If String Match in Each sheet 【发布时间】:2019-09-05 06:19:14 【问题描述】:

我正在用 Excel 为奶牛场设置柴油记录管理系统。它的功能类似于原始的关系数据库系统。司机、车辆和承包商都有自己的表格。

如果出现错误,我正在尝试添加一个 Sub 以删除条目。每个条目在相关电子表格的第 1 列中都有一个唯一 ID。

我的 Sub 应该遍历所有工作表,确定 ID 是否存在于工作表的第 1 列中,如果 ID 存在于工作表中,则删除该 ID 所在的行。

它没有做我正在尝试的事情,我不知道为什么。任何帮助将不胜感激。

我也尝试选择 EntireRow 而不是删除它 - 只是为了查看它是否选择了错误的行并删除,但是我的代码返回运行时错误 1004:“范围类的选择方法失败”。

'Sub Delete_2()

Dim r As Integer
Dim To_Delete As String

To_Delete = InputBox("Input Entry ID to delete", "Delete Record", 
"Entry_ID")
For Each sht In Worksheets
    For r = sht.UsedRange.Rows.Count To 1 Step -1
        If Cells(r, "A").Value = To_Delete Then
            sht.Rows(r).EntireRow.Delete
        End If
    Next r
Next sht

End Sub'

代码运行没有错误,但不会删除任何行。 我怀疑该错误与 ActiveSheet 或外部 For 循环(“For Each sht in WorkSheets”)有关。单击按钮即可激活宏。如果我在按钮所在的工作表的第 1 列中放置一个 ID,它将删除正确的行。如果相同的 ID 在多个其他工作表的第 1 列中,则不会删除行。如果宏是通过在 ActiveSheet 中没有 ID 的情况下单击按钮运行的,则不会删除任何行。

【问题讨论】:

尝试For Each sht In ThisWorkbook.Worksheets 然后If sht.Cells(r, "A").Value = To_Delete Then Hi Damian 不幸的是结果相同 您在哪一行出现错误? 正如我在问题描述中所说,代码运行没有错误但没有删除任何行。 身份证是您工作表上的数字吗?在这种情况下,将您的变量声明为 Long 或 Integer。 【参考方案1】:

我稍微修改了您的代码,使引用完全合格。

它对我有用。看看它是否适合你。

Dim r As Integer
Dim To_Delete As String
To_Delete = InputBox("Input Entry ID to delete", "Delete Record", "Entry_ID")
Application.ScreenUpdating = False
For Each sht In ThisWorkbook.Worksheets
    For r = sht.UsedRange.Rows.Count To 1 Step -1
        If sht.Cells(r, "A").Value = To_Delete Then
            sht.Cells(r, "A").EntireRow.Delete
        End If
    Next r
Next sht
Application.ScreenUpdating = True

【讨论】:

以上是关于如果每个工作表中的字符串匹配,则修复删除行的主要内容,如果未能解决你的问题,请参考以下文章

Access VBA:删除单元格值与 Access 表中的值匹配的 Excel 行

如何用另一个表中的匹配值替换/更新列中每个字符串的所有实例?

Google Script:如果行中的值存在于另一个工作表中,则删除行

ORACLE SQL 查询从其他表中的行字符串匹配的行返回值

KMP算法

Excel导入数据到Sql server 中出错:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”