|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 autumnalRain 于 2015-7-24 13:21 编辑
一、求助主题:想利用VBA+SQL批量打印直拨单。请各位老师依据本人思路进行指点,对本人是个学习过程。感谢……
二、本人思路:
1、生成打印清单,如【打印清单】工作表
2、以查询清单的凭证号和项目名称作为查询条件生成单个凭证号下的不同项目的领料记录,如【查询结果】工作表
3、判断领料记录是否超过10行--不超过10行,自动编号,空行不编号;超过10行刚清空以前内容,重新打印一张,并自动编号,空行不编号;见【材料直拨单模板】
三、求助内容:
第三步,如何根据查询记录行数判断是否分页,并写入数据至【材料直拨单模板】
代码如下:
Dim I As Integer
Sub 查询结果()
Dim Rmax As Integer
Dim SVoucher, SProject
Rmax = Sheets("打印清单").Range("a1").CurrentRegion.Rows.Count ' MsgBox Rmax
For I = 2 To Rmax
SVoucher = Sheets("打印清单").Cells(I, 1)
SProject = Sheets("打印清单").Cells(I, 2)
Sheets("查询结果").Cells.Clear
Dim cnn As Object, SQL
Set cnn = CreateObject("ADODB.Connection")
cnn.Open "provider=microsoft.ACE.OLEDB.12.0;extended properties='Excel 12.0;hdr=yes';data source=" & ThisWorkbook.FullName
SQL = "select 凭证号,名称,规格,单位,数量,单价,金额,项目名称 from [项目名称$] where [凭证号]=""" & SVoucher & """ And [项目名称]= """ & SProject & """"
Sheets("查询结果").[a1].CopyFromRecordset cnn.Execute(SQL)
With Sheets("材料直拨单模板") '直拨单数据写入
MsgBox I
Union(.[B2], .[C2], .[G2]).ClearContents
.[B2] = SProject
.[C2] = Right(SVoucher, Len(SVoucher) - InStrRev(SVoucher, "-"))
.[G2] = Left(SVoucher, InStrRev(SVoucher, "-")) & "28"
End With
cnn.Close
Set cnn = Nothing
Next I
End Sub
|
|