【问题标题】: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。

标签: excel vba


【解决方案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

【讨论】:

    猜你喜欢
    • 2021-11-12
    • 2022-10-15
    • 2021-04-17
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    相关资源
    最近更新 更多