Excel VBA代码中的IF语句每一次都失败

Excel VBA代码中的IF语句每一次都失败,excel,vba,Excel,Vba,我正在尝试从包含多个工作表的Excel工作簿中删除筛选的行。我使用了动态范围,因为每张图纸的行数不同 我曾尝试使用If语句使代码在一些特定的工作表中循环,但它不起作用。如果没有ws,代码不会移动到其他工作表。激活 Sub-DeletAnalyst2() '声明变量 将ws设置为工作表,将startcell设置为范围,将lastrow设置为长,将lastcol设置为长 '设置对象 条件=应用程序.InputBox(提示:=“请键入条件文本:”) 对于此工作簿中的每个ws。工作表 ws.Activa

我正在尝试从包含多个工作表的Excel工作簿中删除筛选的行。我使用了动态范围,因为每张图纸的行数不同

我曾尝试使用
If
语句使代码在一些特定的工作表中循环,但它不起作用。如果没有
ws,代码不会移动到其他工作表。激活

Sub-DeletAnalyst2()
'声明变量
将ws设置为工作表,将startcell设置为范围,将lastrow设置为长,将lastcol设置为长
'设置对象
条件=应用程序.InputBox(提示:=“请键入条件文本:”)
对于此工作簿中的每个ws。工作表
ws.Activate
如果(ws.Name“Presentation”)和(ws.Name“Sheet6”)和(ws.Name“sheet11”)和(ws.Name“PrefTracks”)和(ws.Name“AnalystNeeds”)以及(ws.Name“Post Preference”)和(ws.Name“Post Preference Grid”),则
设置startcell=范围(“A1”)
'查找单元格的最后一行和最后一列
lastrow=单元格(ws.Rows.Count,startcell.Column)。结束(xlUp)。行
lastcol=单元格(startcell.Row,ws.Columns.Count).End(xlToLeft).Column
'选择动态范围
范围(起始单元格、单元格(最后一行、最后一列))。选择
自动过滤技术
'ws.Range(startcell,ws.Cells(lastrow,lastcol))
范围(起始单元格,单元格(最后一行,最后一列))。自动筛选字段:=1,准则1:=条件
'删除已筛选的
Selection.Offset(2).特殊单元格(xlCellTypeVisible).删除移位:=xlUp
ActiveSheet.ShowAllData
如果结束
下一个
端接头
我希望代码在某些工作表中循环,但不是在所有工作表中循环。

您需要将对
范围
单元格
的所有调用与它们所属的工作表一起循环,否则您将无意中引用活动工作表中的单元格

您也可以选择
任何内容

Sub-DeletAnalyst2()
'声明变量
将ws设置为工作表,将startcell设置为范围,将lastrow设置为长,将lastcol设置为长
作为字符串的Dim条件
'设置对象
条件=应用程序.InputBox(提示:=“请键入条件文本:”)
对于此工作簿中的每个ws。工作表
选择Case ws.Name
案例“演示”、“表6”、“表11”、“预跟踪”、“分析需求”、“后偏好”、“后偏好网格”
“什么也不做
其他情况
与ws
设置起始单元格=.Range(“A1”)
'查找单元格的最后一行和最后一列
lastrow=.Cells(.Rows.Count,startcell.Column).End(xlUp).Row
lastcol=.Cells(startcell.Row,ws.Columns.Count).End(xlToLeft).Column
'选择动态范围
带.Range(startcell,.Cells(lastrow,lastcol))
.自动筛选字段:=1,准则1:=条件
.偏移量(2).特殊单元格(xlCellTypeVisible).删除移位:=xlUp
以
.ShowAllData
以
结束选择
下一个
端接头

在没有ws.Activate的情况下不会移动到其他工作表。
-因为您需要使用
ws
调用每个
范围和
单元格。例如:使用
设置startcell=ws.Range(“A1”)
而不是
设置startcell=Range(“A1”)
。也可能有用。当我设置startcell=ws.range(A1)时,代码会在范围(startcell,Cells(lastrow,lastcol))处抛出错误。选择Hey Gserg,您的意思是为每个工作表定义所有范围吗?if语句不适用于此代码。代码正在删除所有工作表,这不是我想要的。@Meera我的工作表有相同的问题吗?@gserg代码第一次运行,但未能循环,并在-Selection.Offset(2).SpecialCells(xlCellTypeVisible).Delete Shift:=XLUp问题没有ws.activate代码不会在各个工作表中循环。在我输入ws.activate之后,代码倾向于在所有工作表中循环,即使我们已经指定排除这些工作表@GSerg@Meera您不应将
ws.activate
添加到此代码中。它在没有它的情况下工作。代码正在工作,只是抛出了一个运行时错误“1004”。在某些情况下未发现细胞。我该如何避免这个错误?@Meera这取决于它发生在哪里以及发生时你想做什么。