吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 667|回复: 5
收起左侧

[求助] 根据打印区域中分页符把Excel中打印区域按预览的页面批量转化为图片并导出

[复制链接]
kai120690 发表于 2023-12-6 09:55
我是想根据打印区域中分页符把Excel中打印区域按预览的页面批量转化为图片并导出
运行下面的代码会提示.PrintArea类型不匹配,求大神帮我修改下,感谢

Sub ExportPrintAreaAsImage()
    Dim ws As Worksheet
    Dim printArea As Range
    Dim pageBreak As Range
    Dim i As Integer
    Dim savePath As String
   
    ' 设置保存路径
    savePath = "C:\Temp\"
   
    ' 循环遍历每个工作表
    For Each ws In ThisWorkbook.Worksheets
        ' 获取当前工作表的打印区域
        Set printArea = ws.PageSetup.PrintArea
        
        If Not printArea Is Nothing Then
            ' 循环遍历每个分页符
            For i = 1 To ws.HPageBreaks.Count + 1
                ' 获取当前分页符之前的打印区域
                If i = 1 Then
                    Set printArea = ws.Range(printArea.Cells(1), ws.HPageBreaks(i).Location.Offset(-1))
                Else
                    Set printArea = ws.Range(ws.HPageBreaks(i - 1).Location.Offset(1), ws.HPageBreaks(i).Location.Offset(-1))
                End If
               
                ' 隐藏网格线和标题栏
                ws.Rows(1).Hidden = True
                ws.PageSetup.PrintGridlines = False
               
                ' 设置打印区域并打印到图片
                ws.PageSetup.PrintArea = printArea.Address
                ws.ExportAsFixedFormat Type:=xlTypePicture, Filename:=savePath & ws.Name & "_" & i & ".jpg", Quality:=xlQualityStandard, _
                                       IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
            Next i
            
            ' 恢复打印区域设置
            ws.PageSetup.PrintArea = printArea.Address
            
            ' 显示网格线和标题栏
            ws.Rows(1).Hidden = False
            ws.PageSetup.PrintGridlines = True
        End If
    Next ws
   
    MsgBox "导出完成!", vbInformation
End Sub

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kurama1982 发表于 2023-12-6 13:38
在Excel VBA中,PrintArea是一个字符串,表示工作表的打印区域。在你的代码中,你尝试将printArea声明为Range对象,这会导致类型不匹配的错误。

为了解决这个问题,你需要将printArea声明为String类型,并使用PrintArea属性来获取工作表的打印区域字符串。以下是修改后的代码:

Sub ExportPrintAreaAsImage()
    Dim ws As Worksheet
    Dim printArea As String
    Dim pageBreak As Range
    Dim i As Integer
    Dim savePath As String
   
    ' 设置保存路径
    savePath = "C:\Temp\"
   
    ' 循环遍历每个工作表
    For Each ws In ThisWorkbook.Worksheets
        ' 获取当前工作表的打印区域
        printArea = ws.PageSetup.PrintArea
        
        If Not printArea = "" Then
            ' 循环遍历每个分页符
            For i = 1 To ws.HPageBreaks.Count + 1
                ' 获取当前分页符之前的打印区域
                If i = 1 Then
                    Set printRange = ws.Range(printArea).Resize(ws.HPageBreaks(i).Location.Row - 1 - ws.Range(printArea).Row)
                Else
                    Set printRange = ws.Range(ws.HPageBreaks(i - 1).Location.Offset(1)).Resize(ws.HPageBreaks(i).Location.Row - 1 - ws.Range(ws.HPageBreaks(i - 1).Location.Offset(1)).Row)
                End If
               
                ' 隐藏网格线和标题栏
                ws.Rows(1).Hidden = True
                ws.PageSetup.PrintGridlines = False
               
                ' 设置打印区域并打印到图片
                ws.PageSetup.PrintArea = printArea
                printRange.ExportAsFixedFormat Type:=xlTypePicture, Filename:=savePath & ws.Name & "_" & i & ".jpg", Quality:=xlQualityStandard, _
                                               IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
            Next i
            
            ' 恢复打印区域设置
            ws.PageSetup.PrintArea = printArea
            
            ' 显示网格线和标题栏
            ws.Rows(1).Hidden = False
            ws.PageSetup.PrintGridlines = True
        End If
    Next ws
   
    MsgBox "导出完成!", vbInformation
End Sub
商朝电工 发表于 2023-12-6 15:40
 楼主| kai120690 发表于 2023-12-7 12:01
kurama1982 发表于 2023-12-6 13:38
在Excel VBA中,PrintArea是一个字符串,表示工作表的打印区域。在你的代码中,你尝试将printArea声明为Ran ...

还是运行不成功,这是我的测试文档 ,能否再帮忙看下,感谢!https://wormhole.app/QPvRl#7VcvYN0kh3xuSdaWtBMc_g
kurama1982 发表于 2023-12-7 13:38
1.将声明 Dim printArea As Range 改为 Dim printAreas As Areas。这样可以使用 Areas 对象来表示打印区域中的多个区域。

2.在获取打印区域时,将 Set printArea = ws.PageSetup.PrintArea 改为 Set printAreas = ws.PageSetup.PageAreas。这样可以获取打印区域的所有区域。

3.在设置打印区域并打印到图片之前,需要使用 printAreas.Areas(i) 来获取每个分页符之前的打印区域。
cybpcdh 发表于 2024-2-26 12:50
大佬神技
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-4 02:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表