|
楼主 |
发表于 2023-7-19 21:00
|
显示全部楼层
老师,你好,你写的SQL代码。我进行了学习,加以注释。
并用到了我的表中。有一些问题还请老师再给予帮助。谢谢!
提示str_cnn 变量未定义。
然后我在Dim中加入了str_cnn 的定义。
结果又出现了“至少一个参数没有被指定值” 点击调试指向代码“rst.Open Sql, Cnn, 1, 4”
而且我这边运行出现以下问题。
1、没有盘点到的商品(实盘录入表中没有的商品)提取到差异表中,实盘数量列需要显示 0(实盘录入表中有的商品 实盘数量不变)
2、没有盘点到的商品(实盘录入表中没有的商品) 差异数量不会自动计算。
3、如何优先显示实盘录入表中数据再显示没有盘点到的商品。现在是按照库存表中的顺序在显示。
Sub test()
Dim Cnn As Object, rst As Object, str_cnn
Dim mypath As String, Sql As String, st As String
Set Cnn = CreateObject("ADODB.Connection") '以上是第一步,后期绑定ADO
mypath = ThisWorkbook.FullName '获取当前工作簿的路径和名称
Set rst = CreateObject("ADODB.Recordset")
If Application.Version < 12 Then
str_cnn = "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & mypath '格式为.xls调用以下语句
Else
str_cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & mypath '格式为.xlsx调用下述语句
End If
Cnn.Open str_cnn '判断一下当前excel的版本,12.0以下使用microsoft.jet.oledb.4.0;以上使用Microsoft.ACE.OLEDB.12.0
'以上是第二步,建立链接
If Sheet4.OptionButton1.Value = True Then
st = "" '判断含0库存提取
End If
If Sheet4.OptionButton2.Value = True Then
st = " and val(库存数量)<>0 and 库存数量 is not null" '判断不含0库存提取
End If
If Sheet4.OptionButton3.Value = True Then
st = " and 实盘数量-库存数量<>0" '判断差异为0不提取
End If
Sql = "select a.货号 as 货号,a.条码 as 条码,a.商品名称 as 商品名称,a.单位 as 单位,实盘数量,库存数量,实盘数量-库存数量 as 差异数量 from" _
& "[" & Sheet3.name & "$a:j] as a left join [" & Sheet2.name & "$a:f] as b on a.条码=b.条码 where 1=1 "
'Sql 语句,查询 sheet3和sheet2 表中货号、条码.....
Sql = Sql & st
Application.ScreenUpdating = False '禁止出现提示对话框
rst.Open Sql, Cnn, 1, 4
With Sheet4
.Range("b2:h65536").ClearContents '清空【B2:H65536】区域内容
.Range("b2").CopyFromRecordset rst '原 将SQL查询到的内容复制到B2单元格为左上角的单元格区域
' 以上是第三步,执行SQL语句并将数据读入表格指定区域
Cnn.Close '关闭链接
Set Cnn = Nothing '释放内存
Application.ScreenUpdating = True '允许屏幕更新
End With
End Sub
|
-
|