以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- VBA 打印 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=117169) |
||||
-- 作者:873773115 -- 发布时间:2018/4/8 10:36:00 -- VBA 打印
老师,问题是用EXCEL 报表分类打印,但是出现了如果一个订单下的种类相同,分组行就不会生成。如果种类不是同一种的话,就会将模板中的分组行生成,然后隐藏。 但是这样在VBA打印代码中就没法分页了
|
||||
-- 作者:873773115 -- 发布时间:2018/4/8 10:37:00 -- 这个就生成并隐藏了 此主题相关图片如下:qq图片20180408103627.png |
||||
-- 作者:873773115 -- 发布时间:2018/4/8 10:38:00 -- 这个就没有生成 此主题相关图片如下:qq图片20180408103744.png |
||||
-- 作者:有点甜 -- 发布时间:2018/4/8 11:36:00 -- 代码改成这样
For i As Integer = FirstRow To EndRow \' |
||||
-- 作者:873773115 -- 发布时间:2018/4/8 15:26:00 -- 谢谢老师上午的解答。现在如果选择多笔订单连打的时候,每切换一个单号,就会生成两个隐藏的空行,用VBA每次只能删除一个空行,请老师看下 |
||||
-- 作者:873773115 -- 发布时间:2018/4/8 15:28:00 -- 此主题相关图片如下:qq图片20180408152246.png |
||||
-- 作者:873773115 -- 发布时间:2018/4/8 15:29:00 -- Relations.Delete("asdf") Dim dt3 As Table = Tables("订单主表") Dim ids As String If dt3.Current IsNot Nothing Then With Tables("订单主表") If .TopPosition > -1 Then \'如果选定区域包括数据行 For i As Integer = .TopPosition To .BottomPosition ids = ids & ",\'" & dt3.Rows(i)("单号") & "\'" Next End If End With ids= ids.Trim(",") Relations.Add("asdf",DataTables("订单主表").DataCols("单号"),DataTables("订单明细表").DataCols("单号")) Dim Book As New XLS.Book(ProjectPath & "Attachments\\订单表.xls") \'打开模板 Dim fl As String = ProjectPath & "Reports\\订单表.xls" Dim Sheet As XLS.Sheet = Book.Sheets(0) With Sheet.PrintSetting .LandScape = False .MarginLeft = 5 \'左右边距设为20毫米 .MarginRight = 5 .MarginTop = 5 \'上下边距设为15毫米 .MarginBottom = 5 End With Book.Build() \'生成报表 Book.Save(fl) Dim App As New MSExcel.Application Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(fl) Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1) Dim EndRow As Integer = Ws.Range("G65536").End(MSExcel.XlDirection.xlUp).Row \'对A列从第1行开始向下查找,直到找到最后一个非空单元格为止,并得到其行号.也就是有内容的开始行 Dim FirstRow As Integer = Ws.Range("A1").End(MSExcel.XlDirection.xlDown).Row \'对A列从第1行开始向下查找,直到找到最后一个非空单元格为止,并得到其行号.也就是有内容的开始行 Ws.Cells.PageBreak = MSExcel.XlPageBreak.xlPageBreakNone \'清除所有分页符 For i As Integer = FirstRow To EndRow \' If ws.Rows(i).EntireRow.hidden = True Then ws.Rows(i).EntireRow.delete End If Next i Dim Endrow1 As Integer = ws.range("G65536").End(MSExcel.XlDirection.xlUp).Row For t As Integer = Firstrow To Endrow1 If ws.cells(t-1,1).text Like "收货人*" Then Ws.Rows(t).PageBreak = MSExcel.XlPageBreak.xlPageBreakManual End If Next t With Ws.PageSetup .PrintArea = "A" & FirstRow -3 & ":h" & Endrow1 \'打印工作表的指定区域 \'设置页面 .LeftMargin = 5 \'页面左边距 .RightMargin = 5\'页面右边距 .TopMargin = 5 \'页面顶部边距 .BottomMargin = 5 \'页面底部边距 .CenterHorizontally = True \'页面水平居中 .CenterVertically = True \'页面垂直居中 \'设置页 .Orientation = MSExcel.xlPageOrientation.xlPortrait \'.Orientation = MSExcel.xlPageOrientation.xlLandscape \'\'缩放打印 \'.Zoom = True \'以下设置将缩印在一页内 \'.FitToPagesWide = 1 \'按照1页的宽度打印 \'.FitToPagesTall = 1 \'按照1页的高度打印 End With App.Visible = True Ws.PrintPreview App.Quit End If
|
||||
-- 作者:有点甜 -- 发布时间:2018/4/8 23:28:00 -- 空行问题,是你模板 1、2 行 以及 最后一行 导致的吧?把空行删除后测试。
如果确实要删除空行,请从后面开始删
For i As Integer = EndRow To FirstRow Step -1 If ws.Rows(i).EntireRow.hidden = True Then
ws.Rows(i).EntireRow.delete
End If
Next i
|
||||
-- 作者:873773115 -- 发布时间:2018/4/9 8:24:00 -- 甜老师,模板第一行和第二行 是限制打印范围和以单号换页的,不是空行 不能删掉 |
||||
-- 作者:873773115 -- 发布时间:2018/4/9 8:25:00 --
|