Execl中VBA的问题,有源码,高分!

longji 2002-07-03 02:22:21
Private Sub Workbook_Open()
Dim i As Integer
Dim j As Integer
Set cnn = CreateObject("ADODB.connection")
Set rs = CreateObject("ADODB.Recordset")
cnn.connectionstring = "Driver={SQL Server};server=128.129.36.64;uid=sa;pwd=;database=ycjxc"
cnn.Open

Sheet2.Cells(1, 1) = "代码"
Sheet2.Cells(1, 2) = "名称"
Sheet2.Cells(1, 3) = "数量"
Sheet2.Cells(1, 4) = "金额"
Sheet2.Cells(1, 5) = "单价"

Set rs = cnn.Execute("select sum(sl),sum(je) from xs200206 " & " where shr='邹仁钧'or shr='赵波'or shr='丁德权'or shr='杨键' or shr='周勇'or shr='从红奎' or shr='朱建国'or shr='王春山'")
Sheet2.Cells(2, 1) = "合计"
Sheet2.Cells(2, 3) = rs(0).Value
Sheet2.Cells(2, 4) = rs(1).Value

Set rs = cnn.Execute("Select jydm,jymc,sum(sl),sum(je),dj from xs200206 " & "where shr='邹仁钧'or shr='赵波'or shr='丁德权'or shr='杨键' or shr='周勇'or shr='从红奎' or shr='朱建国'or shr='王春山' " & "group by jydm,jymc,dj " & " order by dj desc ")

rs.movefirst
i = 3
j = 0
While Not rs.EOF
Sheet2.Cells(i, 1) = rs(0).Value
Sheet2.Cells(i, 2) = rs(1).Value
Sheet2.Cells(i, 3) = rs(2).Value
Sheet2.Cells(i, 4) = rs(3).Value
Sheet2.Cells(i, 5) = rs(4).Value
i = i + 1
rs.movenext
Wend
cnn.Close
Set cnn = Nothing
Set rs = Nothing
End Sub
以上是我的源码,已经通过运行。现在要在这个基础上进一步分类。就是jydm中有一些是以32******开头的,而有一些不是,我要把这两个分开,要如何才能实现,在数据库中或在Sheet2中实现都行,最好是在Sheet2中实行。谢谢!!!
...全文
108 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
longji 2002-07-11
  • 打赏
  • 举报
回复
好的!谢谢你!收获很大!有些时候总是想把程序写的最优,但更多的时候不是写成这样的就很好用了,真有趣!谢谢你!!!!!
zephyr_zhao 2002-07-10
  • 打赏
  • 举报
回复
哇!你自己不能判断呀?
dim mm as string
mm=month(now())
if month(now())<10 then mm="0" & mm

VBA中可不可以用系统时钟?
我一般用系统的计划任务来自动调用VB的程序
你可以把VBA 写在VB里
或者你在EXCEL里写一个定时器,每过10分种,读一下当前时间,看看要不要执行

结账把.....
longji 2002-07-10
  • 打赏
  • 举报
回复
谢谢!我试过了,year,month,day,要有格试的,这样查出来的月份是1,2,3,。。。,7,8,9,10,11,12,我要用01,02。。。这样的格试。
另外,在VBA中可不可以用系统时钟,如果可以的话就能够让程序自动执行了。如果能自动 执行不是很好的一件事嘛,这样就连简单的操作也可以不要了。
longji 2002-07-09
  • 打赏
  • 举报
回复
谢谢zephyr_zhao(zephyr)!上面的问题我已经解决了!我的最初目的已经基本达到了。下面我想做的是:("Select jydm,jymc,sum(sl),sum(je),dj from xs200206 " 中的xs200206要在每个月月初更换!我要让它自动化,也就是用系统时钟控制它。每当到月初时,它会自动变为下一个月的数据表如:xs200207\xs200208\---------\等。目前在VBA中系统时钟怎么用,另外,xs******以什么方式变化我还没有想清楚。我不想让人工去添写,如对话框之类的是不想用的。
不知有没有办法?
zephyr_zhao 2002-07-09
  • 打赏
  • 举报
回复
那你每次运行这个VBA的时候,先读当前时间啊,有VBA.NOW(),然后生成相应的SQL语句

如yy=year(now())
mm=month(now())
SQL="select ... from xs" & yy & mm & " where....."
zephyr_zhao 2002-07-03
  • 打赏
  • 举报
回复
你最好说清楚要如何分类
zephyr_zhao 2002-07-03
  • 打赏
  • 举报
回复
Set rs = cnn.Execute("Select jydm,jymc,sum(sl),sum(je),dj from xs200206 " & "where shr='邹仁钧'or shr='赵波'or shr='丁德权'or shr='杨键' or shr='周勇'or shr='从红奎' or shr='朱建国'or shr='王春山' " & "group by jydm,jymc,dj " & " order by jydm,dj desc ")

先Order By Jydm,这样所有32*****都在一起了
在写Excel的时候,先判断是否right(rs(0).value,2)="32",然后作处理

order by jydm的好处是,你可以在程序里放一些标志位,在处理32**处理结束后,就不需要再判断了,提高些性能

5,139

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 Office开发/ VBA
社区管理员
  • Office开发/ VBA社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧