VBA调用autofilter筛选PO号码时结果不符合预期问题求助
VBA AutoFilter筛选结果异常修复方案
问题根因
- 核心错误为变量名不匹配:你声明的存储用户输入PO编号的变量为
po_num,但AutoFilter筛选代码行中错误使用了未定义变量po_number。VBA会默认将未声明变量赋值为空值,最终筛选逻辑变为反向匹配,因此输出了所有不符合条件的内容。 - 可选优化:代码中大量使用
Select、ActiveSheet等动态引用对象,执行效率低且容易因工作表意外切换出现异常。
修复后代码
Sub po_finder() Dim po_num As String Dim sourceSht As Worksheet, resultSht As Worksheet ' 绑定数据源工作表,取消保护 Set sourceSht = Sheets("Analysis") sourceSht.Unprotect "mech_eng_123" ' 读取用户输入的PO编号 po_num = UserForm_PO.TextBox1.Value ' 执行筛选:修正变量名错误 sourceSht.Range("W1").AutoFilter Field:=23, Criteria1:=po_num ' 新建结果工作表 Set resultSht = Sheets.Add(After:=sourceSht) ' 直接复制筛选后内容,无需选中操作 sourceSht.Range("A1:AW500").Copy Destination:=resultSht.Range("A1") ' 清理环境 Application.CutCopyMode = False sourceSht.AutoFilterMode = False ' 若需要恢复原工作表保护,可取消下方注释 ' sourceSht.Protect "mech_eng_123" End Sub
其他注意事项
- 若PO Number列在表格中为数值格式,将
po_num定义为字符串String可能出现类型不匹配,可调整声明为Dim po_num As Long - 若数据行数不固定,可将复制范围
A1:AW500替换为sourceSht.UsedRange,自动适配实际数据范围,避免漏复制或者多复制空行。
内容的提问来源于stack exchange,提问作者AHMAD
相关产品推荐
相关产品推荐

