ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] VBA的SQL查询出来的结果,字段自动加了1,很是费解

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-2-19 18:33 来自手机 | 显示全部楼层 |阅读模式
各位大神帮忙看看这段代码,哪儿出了问题,[提成发放]查询出来的结果会自动加一,研究了好几天了,百思不得其解:


Sub 统计数据()
On Error Resume Next
Set cnn = CreateObject("adodb.connection")
cnn.Open "provider=microsoft.ace.oledb.12.0;extended properties=""excel 12.0;hdr=yes"";data source=" & ThisWorkbook.FullName
'获得日期
年月 = Sheet2.Cells(Rows.Count, 1).End(xlUp).Value

'以下代码解决提成扣回中同一人将离职日期统一填充
sql5 = "select distinct 员工编码 from [提成扣回$] where 日期=" & "#" & 年月 & "# and 离职时间 is not null"
Set rs = CreateObject("adodb.recordset")
rs.Open sql5, cnn, 1, 3
For i = 1 To rs.RecordCount
    a = rs.Fields(0)
    Sheets("提成扣回").[a1].AutoFilter 12, a
    Sheets("提成扣回").[a1].AutoFilter 1, Format(年月, "yyyy/m/d")
    Set rg = Sheets("提成扣回").Cells(Sheets("提成扣回").Rows.Count, 27).End(xlUp)
    rg.Copy Application.Intersect(Sheets("提成扣回").UsedRange.SpecialCells(12), Sheets("提成扣回").Range("aa2:aa100000"))
    rs.MoveNext
Next i
Sheets("提成扣回").AutoFilterMode = False


'获得提成扣回sheet页数据集
sql6 = "select 业务单元,一级单位,二级单位,三级单位,四级部门,姓名,员工编码,提成金额,日期,离职时间 from [提成扣回$] where 日期=" & "#" & 年月 & "#"
'联合查询数据集中汇总聚合提成金额
sql7 = "select 姓名,员工编码,日期,离职时间,sum(提成金额) as 负提成金额 from (" & sql6 & ") group by 姓名,员工编码,日期,离职时间"
'获得正数提成发放记录集
sql8 = "select 姓名,员工编码,日期,离职时间,sum(提成金额) as 正提成金额 from [提成发放$] where 日期=" & "#" & 年月 & "#" & " group by 姓名,员工编码,日期,离职时间"
'正数与负数提成结合,确定提成实扣金额及其他金额
sql9 = "select a.姓名 as 姓名,a.员工编码 as 员工编码,a.离职时间 as 离职时间,a.日期 as 日期,round(b.正提成金额,2) as 提成发放,round(负提成金额,2) as 应扣,iif(b.离职时间 is not null or a.离职时间 is not null ,round(负提成金额,2),iif(iif(b.正提成金额 is null,0,b.正提成金额)*0.5<负提成金额*(-1) ,round(b.正提成金额*(-0.5),2),round(负提成金额,2))) as 实扣,应扣-iif(实扣 is null,0,实扣) as 待扣 from (" & sql7 & ") as a left join (" & sql8 & ") as b on a.姓名&a.员工编码=b.姓名&b.员工编码"
sql10 = "select 业务单元,一级单位,二级单位,三级单位,四级部门,姓名,员工编码,round(sum(提成金额),2) as 新增提成,日期,离职时间 from [提成扣回$] where 项目名称(一级)<>'历史提成退款数据' and 日期=#" & 年月 & "# group by 业务单元,一级单位,二级单位,三级单位,四级部门,姓名,员工编码,日期,离职时间"
sql11 = "select b.业务单元,b.一级单位,b.二级单位,b.三级单位,b.四级部门,a.姓名,a.员工编码,null as 岗位名称,null as 职衔,null as 入职日期,format(a.离职时间,'yyyy/m/d'),null as 身份证号,null as 职级,a.日期,a.提成发放,b.新增提成,a.应扣,a.实扣,a.待扣 from (" & sql9 & ") as a left join (" & sql10 & ") as b on a.姓名&a.员工编码=b.姓名&b.员工编码"

'删除台账中已有月份数据
Sheets("台账").Range("a1").AutoFilter 14, Format(年月, "yyyy/m/d")
Set rg = Sheets("台账").Range("a1").SpecialCells(xlVisible)
Application.Intersect(Sheets("台账").Rows("2:200000"), rg).Delete
Sheets("台账").AutoFilterMode = False
'清空原有累计数据
Set wd = Sheets("台账").Columns("a:a").Find("累计")
If Not wd Is Nothing Then wd.EntireRow.Delete
'加入本月台账数据
m = Sheets("台账").[a1].CurrentRegion.Rows.Count
'Cells(1, 1).CopyFromRecordset cnn.Execute(sql8)
Sheets("台账").Cells(m + 1, 1).CopyFromRecordset cnn.Execute(sql11)
m = Sheets("台账").[a1].CurrentRegion.Rows.Count
'添加累计
Sheets("台账").Cells(m + 1, 1) = "累计"
For i = 1 To 5
    Sheets("台账").Cells(m + 1, 14 + i).Formula = "=Subtotal(109," & Sheets("台账").Cells(2, 14 + i).Address(0, 0) & ":" & Sheets("台账").Cells(m, 14 + i).Address(0, 0) & ")"
Next i
Sheets("台账").Cells(m + 1, 1).EntireRow.Font.Bold = True
Sheets("台账").Range("a1").CurrentRegion.Borders.LineStyle = xlContinuous
Set cnn = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2023-2-19 23:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
能不能上传附件,没有附件演示,光看这代码,我们也不好理解。

TA的精华主题

TA的得分主题

发表于 2023-2-20 05:40 | 显示全部楼层
问题必须上附件,否则不明白你说的是什么
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 03:16 , Processed in 0.033394 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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