VBA代码运行时意外删除非目标工作表行的问题排查
问题排查:VBA代码意外删除非目标工作表行的原因
你的代码看似只操作Sheet19和YMS_Data,但实际会误删Sheet1("Dock Door Dashboard")行的核心原因是对象限定不明确,具体问题出在With Sheet19代码块内:
With Sheet19 Arr = Array("Entry Gate", "Exit Gate", "IN_TRANSIT", "Not In Yard", "ENTRY_GATE", "EXIT_GATE", "Intrusion_Zone", "UNKNOWN", "") lRowFy = Cells(Rows.count, "A").End(xlUp).Row ' 未加前缀,默认指向活动工作表 For xy = lRowFy To 1 Step -1 For ky = LBound(Arr) To UBound(Arr) If Cells(xy, "K").Value Like Arr(ky) Then ' 未加前缀 Rows(xy).Delete ' 未加前缀 End If Next ky Next xy .UsedRange.RemoveDuplicates Columns:=11, Header:=xlYes ' 加了前缀,正确操作Sheet19 End With
问题细节
在VBA中,With块内的对象如果不加上.前缀,会默认指向当前活动工作表(ActiveSheet),而非With指定的Sheet19。如果运行代码时Sheet1刚好处于活动状态,Cells、Rows这些操作就会作用在Sheet1上,导致该行被误删。
修正后的代码片段
只需给With块内的Cells、Rows加上.前缀,明确绑定到Sheet19即可:
With Sheet19 Arr = Array("Entry Gate", "Exit Gate", "IN_TRANSIT", "Not In Yard", "ENTRY_GATE", "EXIT_GATE", "Intrusion_Zone", "UNKNOWN", "") lRowFy = .Cells(.Rows.count, "A").End(xlUp).Row ' 添加.前缀 For xy = lRowFy To 1 Step -1 For ky = LBound(Arr) To UBound(Arr) If .Cells(xy, "K").Value Like Arr(ky) Then ' 添加.前缀 .Rows(xy).Delete ' 添加.前缀 End If Next ky Next xy .UsedRange.RemoveDuplicates Columns:=11, Header:=xlYes End With
额外建议
编写VBA代码时,务必明确限定所有工作表和单元格对象,避免依赖活动工作表的隐含行为,这样能彻底杜绝类似误操作,提升代码稳定性与可读性。
内容的提问来源于stack exchange,提问作者Iron Man
相关产品推荐
相关产品推荐

