You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:02:46