VBA中使用OR逻辑运算符筛选文件后缀时的语法问题求助
修正VBA删除指定后缀行的逻辑问题
嗨,刚入门VBA碰到逻辑小坑很正常,我来帮你捋捋问题所在~
你当前代码的核心问题是逻辑运算符的优先级和范围搞错了:
原来的条件Not (Cells(i, "A").Value) Like "*exe" Or ... 其实等价于「(不是exe结尾) 或者 (是dll结尾) 或者 (是ocx结尾)」,这会导致所有非exe结尾的行(包括你想保留的dll/ocx行)都被删掉,完全和你的需求相反。
修正后的代码
For i = Last To 2 Step -1 ' 先把单元格值存到变量里,减少重复访问单元格的开销 Dim cellVal As String cellVal = Cells(i, "A").Value ' 逻辑改为:当值既不是exe、也不是dll、ocx结尾时,删除该行 If Not (cellVal Like "*exe" Or cellVal Like "*dll" Or cellVal Like "*ocx") Then Cells(i, "A").EntireRow.Delete End If Next i
关键逻辑说明
- 把三个
Like判断用括号括起来,再整体加上Not,这样就准确表达了「不属于三个后缀中的任何一个」的判断 - 遍历行的时候从后往前(
Last To 2 Step -1)是正确的,因为删除行后不会打乱未遍历的行索引,这个点你做对啦👍
内容的提问来源于stack exchange,提问作者Kabi
相关产品推荐
相关产品推荐

