Foxtable(狐表)用户栏目专家坐堂 → VBA 打印


  共有3040人关注过本帖树形打印复制链接

主题:VBA 打印

帅哥哟,离线,有人找我吗?
873773115
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:314 积分:2887 威望:0 精华:0 注册:2017/11/5 13:39:00
VBA 打印  发帖心情 Post By:2018/4/8 10:36:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目4.zip


老师,问题是用EXCEL 报表分类打印,但是出现了如果一个订单下的种类相同,分组行就不会生成。如果种类不是同一种的话,就会将模板中的分组行生成,然后隐藏。  但是这样在VBA打印代码中就没法分页了

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:314 积分:2887 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2018/4/8 10:37:00 [只看该作者]

这个就生成并隐藏了
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20180408103627.png
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:314 积分:2887 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2018/4/8 10:38:00 [只看该作者]

这个就没有生成
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20180408103744.png
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:314 积分:2887 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2018/4/8 15:26:00 [只看该作者]

谢谢老师上午的解答。现在如果选择多笔订单连打的时候,每切换一个单号,就会生成两个隐藏的空行,用VBA每次只能删除一个空行,请老师看下

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:314 积分:2887 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2018/4/8 15:28:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20180408152246.png
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:314 积分:2887 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:314 积分:2887 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2018/4/9 8:24:00 [只看该作者]

甜老师,模板第一行和第二行 是限制打印范围和以单号换页的,不是空行 不能删掉

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:314 积分:2887 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2018/4/9 8:25:00 [只看该作者]

<订单主表,1>
<END>

 回到顶部
总数 12 1 2 下一页