如何在Excel工作簿所有工作表中使用Application.XLookup?
遍历工作簿所有工作表实现XLookup查找的VBA方案
修改后的代码
Sub namelookup() Dim ws As Worksheet Dim lookupValue As Variant Dim result As Variant ' 获取输入框里的查找值 lookupValue = Val(SalesForm.BHSDMAINNUMBERLF.Value) ' 遍历工作簿里的每一张工作表 For Each ws In ThisWorkbook.Worksheets ' 在当前工作表的S列找匹配值,返回T列内容,没找到就返回空字符串 result = Application.XLookup(lookupValue, ws.Range("S:S"), ws.Range("T:T"), "") ' 找到有效结果就赋值,然后退出循环不用再找了 If result <> "" Then SalesForm.BHSDTAPNAMELF.Value = result Exit For End If Next ws ' 所有表都查完还没找到的话,给个提示(可按需修改) If result = "" Then SalesForm.BHSDTAPNAMELF.Value = "未找到匹配值" End If End Sub
核心逻辑说明
- 用
For Each...Next循环遍历工作簿内所有工作表,彻底替代原来手动指定表名的嵌套写法 - 每次循环只处理当前工作表的S/T列,逻辑更清晰,后续新增工作表也不用改代码
- 找到匹配值就立刻退出循环,避免无意义的遍历,提升运行效率
- 新增了未找到匹配值的处理,你可以根据需求改成清空控件内容或者其他提示文本
可选优化:排除特定工作表
如果有些工作表不需要参与查找(比如存放表单的工作表),可以在循环里加个判断跳过:
For Each ws In ThisWorkbook.Worksheets ' 跳过名为"SalesForm"的工作表(根据你的实际表名修改) If ws.Name <> "SalesForm" Then result = Application.XLookup(lookupValue, ws.Range("S:S"), ws.Range("T:T"), "") If result <> "" Then SalesForm.BHSDTAPNAMELF.Value = result Exit For End If End If Next ws
内容的提问来源于stack exchange,提问作者cheese10234
相关产品推荐
相关产品推荐

