如果每个工作表中的字符串匹配,则修复删除行
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:如果行中的值存在于另一个工作表中,则删除行