1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

帖子
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: liushilin

求教通过VBA实现多条件筛选后引用数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-3-14 14:53 | 显示全部楼层
本帖最后由 yynrzwh 于 2025-3-14 14:54 编辑
liushilin 发表于 2025-3-14 09:00
老师,代码运行提示编译错误,next没有for, 是我录入代码时哪里出错了吗,麻烦看下。谢谢

set d(s)这句你换行了。
要么不换行,要么在后面加endif.
下面那个if一样。

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-3-14 15:56 | 显示全部楼层
老师,能不能把你写的原码发出来?

TA的精华主题

TA的得分主题

发表于 2025-3-14 21:42 | 显示全部楼层
你表二中筛选数据的条件应该是按符合数量的施工单位按优先顺序由甲单位或空值-----乙单位或丙单位,但你的例子却完全不符合你自己提出的筛选要求,例如J05010303193 按表二判断一筛选后,施工单位优先应该是空值,且剩余库存15947大于计划领用数量1562,完全符合判断一应是应该是,施工单位为空值剩余库存15947,但例子中却选最大剩余库存是丙单位,
360截图20250314214205919.jpg

TA的精华主题

TA的得分主题

发表于 2025-3-14 21:44 | 显示全部楼层
这个VBA是完全按你出的表2筛选条件做判断,如有不符合的自己修改
Sub romecyf()
Dim Conn As Object, Rst As Object
     Dim strConn As String, strSQL As String
     Dim i As Integer, PathStr As String
     Set Conn = CreateObject("ADODB.Connection")
     Set Rst = CreateObject("ADODB.Recordset")
     PathStr = ThisWorkbook.FullName   '设置工作簿的完整路径和名称
     Select Case Application.Version * 1    '设置连接字符串,根据版本创建连接
     Case Is <= 11
         strConn = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & PathStr
     Case Is >= 12
         strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr & ";Extended Properties=""Excel 12.0;HDR=YES"";"""
     End Select
     '设置SQL查询语句
     Conn.Open strConn    '打开数据库链接
    With ActiveSheet
        For i = 2 To 5
             If .Cells(i, 7) <> 0 Then
                ID = .Cells(i, 4)
                SL = .Cells(i, 7)
               strSQL = "select top 1 采购需求号,需求号,WBS元素,项目负责人,剩余库存,施工单位 from [表二$] where 物料编号='" & ID & "' and 剩余库存>=" & SL & " and (施工单位='甲单位' or 施工单位 is null) order by 剩余库存 desc "
                Set Rst = Conn.Execute(strSQL)
                If Not Rst.EOF Then GoTo 99
               strSQL = "select top 1 采购需求号,需求号,WBS元素,项目负责人,剩余库存,施工单位 from [表二$] where 物料编号='" & ID & "' and 剩余库存>=" & SL & " and (施工单位='乙单位' or 施工单位='丙单位') order by 剩余库存 desc"
                Set Rst = Conn.Execute(strSQL)
                If Not Rst.EOF Then GoTo 99
               strSQL = "select top 1 采购需求号,需求号,WBS元素,项目负责人,剩余库存,施工单位 from [表二$] where 物料编号='" & ID & "' order by 剩余库存 desc"
                Set Rst = Conn.Execute(strSQL)
                If Not Rst.EOF Then GoTo 99
99           .Range("H" & i).CopyFromRecordset Rst
             Rst.Close    '关闭数据库连接
            End If
        Next i
    End With
    Conn.Close
     Set Conn = Nothing
     Set Rst = Nothing
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

1234

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-4-6 12:38 , Processed in 0.034248 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表