ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 求助:用公式计算科目余额表太慢,想改用sql查询

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-10-24 09:53 | 显示全部楼层 |阅读模式
各位老师,我试着用SQL查询方式从表里提取数据,先计算借方金额和贷方金额,程序如下,但是无法通过,能否帮我完成这个表。
Sub SQL查科目余额()
   
Application.ScreenUpdating = False
   
Dim CNN, SQL$  '定义数据库连接和SQL语句

Dim Maxrow As Integer, i As Integer
Set CNN = CreateObject("adodb.connection")  '创建数据库连接
Set RS = CreateObject("adodb.recordset")   '创建一个数据集保存数据
CNN.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName
[D4:E2000].ClearContents

Maxrow = [A65536].End(xlUp).Row
For i = 4 To Maxrow - 3
SQL = " Select sum(iif(isnull(借方金额),0,借方金额)),sum(iif(isnull(贷方金额),0,贷方金额)) from (" & _
        "select 日期,借方金额,贷方金额 from [会计凭证$] where 总账科目 ='&(Cells(i, 1)&' and 明细科目 ='&(Cells(i, 2)&' and 日期<=data(cells(2,4)) and 日期>=data(cells(2,6)))"
  RS.Open SQL, CNN, adOpenKeyset, adLockOptimistic
  
  Sheets("sheet1").Cells(i, 5).CopyFromRecordset RS
  Set RS = Nothing
  Next i

CNN.Close  '关闭数据库连接

Set CNN = Nothing    '将CNN从内存中删除。
End Sub

会计账套.rar

12.84 KB, 下载次数: 74

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-25 19:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请大侠们百忙之中帮我一下啊

TA的精华主题

TA的得分主题

发表于 2014-10-27 16:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub SQL查科目余额()
Application.ScreenUpdating = False
Dim cnn, SQL$  '定义数据库连接和SQL语句
Dim Maxrow As Integer, i As Integer
Set cnn = CreateObject("adodb.connection")  '创建数据库连接
Set rs = CreateObject("adodb.recordset")   '创建一个数据集保存数据

cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName
[D4:E2000].ClearContents

Maxrow = [A65536].End(xlUp).Row
For i = 4 To Maxrow - 3
   SQL = "Select sum(iif(isnull(借方金额),0,借方金额)),sum(iif(isnull(贷方金额),0,贷方金额)) from (" & _
        "select 日期,借方金额,贷方金额 from [会计凭证$] where 总账科目 & 明细科目='" & Cells(i, 1) & Cells(i, 2) & "' and 日期>=# " & Cells(2, 4) & " # and 日期<=#" & Cells(2, 6) & "#)" '
   rs.Open SQL, cnn, 1, 1 'adOpenKeyset, adLockOptimistic
   Sheets("科目余额表").Cells(i, 5).CopyFromRecordset rs
   rs.Close
Next i
cnn.Close  '关闭数据库连接
Set cnn = Nothing    '将CNN从内存中删除。

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-29 20:13 | 显示全部楼层
非常感谢lk868,按您的方法,实现了这一功能 !!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-29 20:13 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-30 02:19 , Processed in 1.057329 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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