ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助:多条件组合查询

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-18 18:33 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 mclxxy 于 2018-6-18 19:19 编辑

VBA小白求优化下面的代码:
Sub dtjzhcx() 'Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False '关闭工作表事件
    Sheets("发货查询").Range("a4:h65536").Clear '清空原有的数据
Dim ar, br, dr, gr, nr, pr, qr, vr, ok, arr, crr, i, m, n, x, a&, MyKey1, MyKey2, MyKey3, MyKey4, y, b, d
   a = Sheets("发货明细").[d65536].End(xlUp).Row
MyKey1 = Sheets("发货查询").Range("k3")
MyKey2 = Sheets("发货查询").Range("l3")
MyKey3 = Sheets("发货查询").Range("m3")
MyKey4 = Sheets("发货查询").Range("n3")
    Application.ScreenUpdating = False '关闭屏幕刷新
   ar = Sheets("发货明细").Range("a3:a" & a)
   br = Sheets("发货明细").Range("b3:b" & a)
   dr = Sheets("发货明细").Range("d3:d" & a)
   gr = Sheets("发货明细").Range("g3:g" & a)
   nr = Sheets("发货明细").Range("n3:n" & a)
   pr = Sheets("发货明细").Range("p3:p" & a)
   qr = Sheets("发货明细").Range("q3:q" & a)
   vr = Sheets("发货明细").Range("v3:v" & a)
   ReDim arr(1 To a - 2, 1 To 8) '重定义a-2行8列 Preserve
   For Each ok In Array(ar, br, dr, gr, nr, pr, qr, vr)
       n = n + 1
       x = UBound(ok)
       For i = 1 To x
        arr(i, n) = ok(i, 1)
       Next i
       If m < x Then m = x
   Next
   If (MyKey1 = "") And (MyKey2 = "") And (MyKey3 = "") And (MyKey3 = "") Then
   'Sheets("发货查询").Range("a4:h65536").Clear
   Sheets("发货查询").Range("a4").Resize(m, n) = arr
   Sheets("发货查询").Range("a4").Resize(m, n).Borders.LineStyle = 1
   GoTo qb
   Else
   ReDim crr(1 To UBound(arr), 1 To 8)
    For d = 1 To UBound(arr)
     If (MyKey1 = "" Or arr(d, 3) = MyKey1) _
     And (MyKey2 = "" Or arr(d, 2) >= MyKey2) _
     And (MyKey3 = "" Or arr(d, 2) <= MyKey3) _
     And (MyKey4 = "" Or arr(d, 4) = MyKey4) Then
     y = y + 1
       For b = 1 To 8
        crr(y, b) = arr(d, b)
       Next b
     End If
    Next d
   End If
If y = "" Then GoTo ts
   Application.ScreenUpdating = True '打开屏幕刷新
   Sheets("发货查询").Range("a4").Resize(y, b - 1) = crr '这里的b为什么是9?
   Sheets("发货查询").Range("a4").Resize(y, b - 1).Borders.LineStyle = 1
qb:
   With Sheets("发货查询").Range("a4:h65536").Font
    .Name = "Times New Roman"
    .Size = 10
    '.Bold = True
   End With
  'Worksheets("发货查询").Columns("A:H").EntireColumn.AutoFit '数据表上从 A 列到 H 列的列宽调整为最合适的值
  Worksheets("发货查询").Columns("A:G").EntireColumn.HorizontalAlignment = xlCenter '左右居中
       '.VerticalAlignment = xlCenter '上下居中
       '.WrapText = False
      ' .Orientation = 0
       '.AddIndent = False
      ' .IndentLevel = 0
      ' .ShrinkToFit = False
       '.ReadingOrder = xlContext
      ' .MergeCells = False
    Application.EnableEvents = True '打开工作表事件
      Exit Sub
ts:
    Application.EnableEvents = True
MsgBox "没有符合条件的数据" & MyKey1 & MyKey2 & MyKey3 & MyKey4 & "换个条件试试!", 64, "温馨提示"
End Sub
附件中,在数据多时运行-(提取产品名称)和(提取代理商名称)模块后保存时数据有效性出错,

这是东拼西凑出来的代码,在运行查询后,文件增大,不知道是什么原因?

收发存查询测试.rar

164.57 KB, 下载次数: 10

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-18 19:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
第一次开新帖,祝各位版主节日快乐!

TA的精华主题

TA的得分主题

发表于 2018-6-18 19:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
mclxxy 发表于 2018-6-18 19:21
第一次开新帖,祝各位版主节日快乐!

对你的需求你啥都不说!让人看你的代码,是这意思吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-18 19:40 | 显示全部楼层
本帖最后由 mclxxy 于 2018-6-19 18:08 编辑
duquancai 发表于 2018-6-18 19:24
对你的需求你啥都不说!让人看你的代码,是这意思吗?

代码后面有情况说明呀,不好意思,需求没有单独放在一起1,优化代码,数据多时也运行快
2,在数据多时运行-(提取产品名称)和(提取代理商名称)模块后保存时数据有效性出错
3,代码中的b的值为什么是9


TA的精华主题

TA的得分主题

发表于 2018-6-18 20:02 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
mclxxy 发表于 2018-6-18 19:40
代码后面有情况说明呀不好意思,需求没有单独放在一起1,优化代码,数据多时也运行快
2,在数据多时运行 ...

好的,有空再看,现在看 世界杯了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-18 20:07 | 显示全部楼层
duquancai 发表于 2018-6-18 20:02
好的,有空再看,现在看 世界杯了。

先行谢过!
追加一个需求:
发货查询表的序号列能否重新从1开始生成新的序号

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-26 21:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
帖沉大海,自己顶一下。找到文件增大的原因,不知道怎么改代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 20:10 , Processed in 0.030146 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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