ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 出入库数量及库存数量汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-15 15:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub test1() '纯练习一下,仅供测试……
  2.   
  3.   Worksheets("订单汇总表").Activate
  4.   ActiveSheet.UsedRange.Offset(1).ClearContents
  5.   Application.ScreenUpdating = False
  6.   
  7.   Dim ar, br, cr, Conn As Object, dict As Object, rs As Object
  8.   Dim strConn As String, strFields As String, SQL As String, tb As String
  9.   Dim A As String, B As String, C As String, i As Long, j As Long
  10.   
  11.   Set dict = CreateObject("Scripting.Dictionary")
  12.   Set Conn = CreateObject("ADODB.Connection")
  13.   
  14.   If Application.Version < 12 Then
  15.     strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=YES';Data Source="
  16.   Else
  17.     strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=YES';Data Source="
  18.   End If
  19.   Conn.Open strConn & ThisWorkbook.FullName
  20.   
  21.   For j = 1 To Worksheets.Count
  22.     With Worksheets(j)
  23.       If .Name Like "*库表明细" Then
  24.         tb = .Name & "$A2:H" & .Range("A:H").Find("*", , xlValues, , xlByRows, xlPrevious).Row
  25.         If strFields = "" Then
  26.           strFields = Join(.[B2:F2&""], ",")
  27.           A = "SELECT DISTINCT " & strFields & " FROM "
  28.         End If
  29.         i = InStr(.Name, "入库")
  30.         A = A & IIf(i, "(", " UNION ALL ") & "SELECT " & strFields & " FROM [" & tb & "]" & IIf(i, "", ")")
  31.         If i Then
  32.           B = "SELECT " & strFields & ",SUM(入库数量) AS 入库总数量 FROM [" & tb & "] GROUP BY " & strFields
  33.         Else
  34.           C = "SELECT " & strFields & ",SUM(出库数量) AS 出库总数量 FROM [" & tb & "] GROUP BY " & strFields
  35.           SQL = "SELECT 出库日期,SUM(出库数量) AS 出库总数量 FROM [" & tb & "] GROUP BY 出库日期"
  36.         End If
  37.         If Len(B) > 0 And Len(C) > 0 Then Exit For
  38.       End If
  39.     End With
  40.   Next
  41.   
  42.   ar = Conn.Execute(SQL).GetRows
  43.   For i = 0 To UBound(ar, 2)
  44.     dict.Add CDate(Replace(ar(0, i), ".", "/")), i
  45.   Next
  46.   
  47.   br = Split(strFields, ",")
  48.   cr = br
  49.   For i = 0 To UBound(br)
  50.     br(i) = "a." & br(i) & "=b." & br(i)
  51.     cr(i) = "a." & cr(i) & "=c." & cr(i)
  52.   Next
  53.   
  54.   strFields = "123 AS 序号,a.*,NULL AS 订单数量,b.入库总数量,c.出库总数量,b.入库总数量-c.出库总数量 AS 库存数量"
  55.   SQL = "SELECT " & strFields & " FROM ((" & A & ") a LEFT JOIN (" & B & ") b ON " & Join(br, " AND ") & ") LEFT JOIN (" & C & ") c ON " & Join(cr, " AND ")
  56.   Set rs = Conn.Execute(SQL)
  57.   
  58.   With Range("A1")
  59.     For i = 0 To rs.Fields.Count - 1
  60.       .Offset(, i) = rs.Fields(i).Name
  61.     Next
  62.     .Offset(1).CopyFromRecordset rs
  63.     With .Offset(, i)
  64.       br = Range(.Offset(1), .End(xlToRight))
  65.       For j = 1 To UBound(br, 2)
  66.         If dict.Exists(br(1, j)) Then br(2, j) = ar(1, dict(br(1, j)))
  67.       Next
  68.       .Resize(UBound(br), UBound(br, 2)) = br
  69.     End With
  70.   End With
  71.   
  72.   rs.Close
  73.   Set rs = Nothing
  74.   Conn.Close
  75.   Set Conn = Nothing
  76.   Set dict = Nothing
  77.   Application.ScreenUpdating = True
  78.   Beep
  79. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-4-16 08:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习了,谢谢大师!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-16 09:03 | 显示全部楼层
ykcbf1100 发表于 2024-4-15 08:41
参与一下。。。。

老师,如果想入库明细表和出库明细表中做个模糊和精确查找功能,这代码能不能帮忙看看,

仓库库存表.rar

59.9 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2024-4-16 09:09 | 显示全部楼层
jordanlive 发表于 2024-4-16 09:03
老师,如果想入库明细表和出库明细表中做个模糊和精确查找功能,这代码能不能帮忙看看,

你的工作表事件会对查询区域产生影响,会出现错误提示。
查询代码不难写。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-16 09:22 | 显示全部楼层
ykcbf1100 发表于 2024-4-16 09:09
你的工作表事件会对查询区域产生影响,会出现错误提示。
查询代码不难写。

那增加查询工表,在去查询入库表明细和出库表明细这样会不会对查询域产生影响

TA的精华主题

TA的得分主题

发表于 2024-4-16 09:33 | 显示全部楼层
本帖最后由 ykcbf1100 于 2024-4-16 10:48 编辑
jordanlive 发表于 2024-4-16 09:22
那增加查询工表,在去查询入库表明细和出库表明细这样会不会对查询域产生影响

我先暂停了工作表事件,你自己视情决定。
二个明细表都写了查询代码(其实差不多),可以精确查询也可以模糊查询。

仓库库存表.7z

53.05 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2024-4-16 09:34 | 显示全部楼层
明细查询代码:

  1. Sub 入库查询() '//2024.4.16
  2.     With Sheets("入库表明细")
  3.         r = .Cells(Rows.Count, 1).End(3).Row
  4.         arr = .[a1].Resize(r, 8)
  5.         Dim a, b, c
  6.         c = 6
  7.         ReDim a(1 To c), b(1 To c), ft(1 To c)
  8.         For x = 1 To c - 1
  9.             a(x) = CStr(.Cells(2, x + 9)): b(x) = x + 1
  10.         Next
  11.         a(c) = .Cells(2, 15): b(c) = 8
  12.         ReDim brr(1 To UBound(arr), 1 To c + 1)
  13.         For i = 3 To UBound(arr)
  14.             fft = 1
  15.             ft(c) = IIf(a(c) = Empty Or arr(i, b(c)) = a(c), 1, 0)
  16.             fft = fft * ft(c)
  17.             For x = 1 To c - 1
  18.                 ft(x) = IIf(a(x) = Empty Or arr(i, b(x)) Like "*" & a(x) & "*", 1, 0)
  19.                 fft = fft * ft(x)
  20.             Next
  21.             If fft = 1 Then
  22.                 m = m + 1
  23.                 For j = 1 To UBound(b)
  24.                     brr(m, j) = arr(i, b(j))
  25.                 Next
  26.                 brr(m, c + 1) = arr(i, c + 1)
  27.             End If
  28.         Next
  29.         If m > 0 Then
  30.             .[j3:p10000].ClearContents
  31.             .[j3].Resize(m, c + 1) = brr
  32.         End If
  33.         MsgBox "OK!"
  34.     End With
  35. End Sub
复制代码


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-10 08:29 , Processed in 0.037712 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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