以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  VBA 打印  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=117169)

--  作者:873773115
--  发布时间:2018/4/8 10:36:00
--  VBA 打印
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.zip


老师,问题是用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         \'
        If ws.cells(i-1,1).text Like "收货人*" Then
            Ws.Rows(i).PageBreak = MSExcel.XlPageBreak.xlPageBreakManual
        End If
    Next
   
    With Ws.PageSetup
        .PrintArea =  "A" & FirstRow - 3 & ":h" & Endrow  \'打印工作表的指定区域
        \'设置页面
        .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


--  作者: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
--  
<订单主表,1>
<END>