ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 子程序里用SQL出错,请帮忙看看

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-8-13 23:35 | 显示全部楼层 |阅读模式
本帖最后由 xiaovba 于 2019-8-15 11:10 编辑

         主程序调用时是用的call 子程序(参数)

          子程序:
         Set cnn = CreateObject("ADODB.Connection")
         cnn.Open "provider=microsoft.ace.oledb.12.0;extended properties='excel 12.0;HDR=Yes;IMEX=1';data source=" & ThisWorkbook.FullName
         ThisWorkbook.Sheets(w).Rows(i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
         ThisWorkbook.Sheets(w).Range("a5:h5").Copy ThisWorkbook.Sheets(w).Range("a" & i & ":h" & i)     ‘制作标题行
         ThisWorkbook.Sheets(w).Name = "sht"                                   ’修改表名                                             

         r = ThisWorkbook.Sheets("sht").Range("h1048576").End(xlUp).Row

         sql = "select a.* from [temp1$] a inner join (select distinct [Store Code] from [sht$a" & i & ":g" & r
         sql = sql & "])b on a.STORE = b.[Store Code]"

         Workbooks.Add
         ActiveSheet.[a2].CopyFromRecordset cnn.Execute(sql)                            '这里报错,说无法识别'sht$a8:g116' ,程序里面i=8.r=116


我把这段单独copy到新的模块里是能运行的。我查了下主程序,在调用之前set cnn=nothing了的。

TA的精华主题

TA的得分主题

发表于 2019-8-14 05:12 | 显示全部楼层
有行数限制,而且一个过程代码行数不要太多了,建议拆分成多个子过程或者函数

TA的精华主题

TA的得分主题

发表于 2019-8-14 07:21 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-8-14 08:46 | 显示全部楼层
2500行一個sub...……….
這樣很笨,很難維護和修改
把運算的部份拆開作private function
每個function明確的要計算什麼,傳回,就很清楚了

TA的精华主题

TA的得分主题

发表于 2019-8-14 08:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-8-14 08:56 | 显示全部楼层
2500行代码---太牛逼了,非常想膜拜学习。

不过以前见过2000左右的,她就是录制了很多宏,然后把宏加入到一个SUB里。

这种操作让我醉了50秒。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-14 14:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我的代码是我自己写的。
昨天晚上连夜改代码,弄了子程序。但是遇到一个问题,子程序里有用ADO+ SQL ,select* from[表$a8:g116]。。。 这句报错。我把这段代码单独拷到一个新的模块里面测试没问题的,可以顺利运行。可是在子程序里为什么不可以呢?
子程序不可以用SQL吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-14 14:12 | 显示全部楼层
顶一下。版主请尽快通过审核。我昨天晚上已经加了一天班了,希望今天能弄好不要在加班。拜托拜托!
PS:刚修改了问题,请版主审核新的求助内容。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-14 15:12 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-8-15 10:47 | 显示全部楼层
xiaovba 发表于 2019-8-14 14:07
我的代码是我自己写的。
昨天晚上连夜改代码,弄了子程序。但是遇到一个问题,子程序里有用ADO+ SQL ,sel ...

憑空說怎麼知道
可能是子過程需要參數吧
你不寫參數也要把大局用到的寫到全局變量
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 09:19 , Processed in 0.041980 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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