|

楼主 |
发表于 2025-4-1 20:40
|
显示全部楼层
在此分享下lss001老师帮忙写的代码
希望能对有需要的人有帮助
Sub png格式()
Dim sht As Worksheet, rng As Range
Dim i&, j&, m&, n&, n1&, n2&, brr(), arr, x&
Set sht = ActiveSheet '当前表
r = Cells(Rows.Count, 2).End(3).Row '结束行
sht.Cells.EntireRow.Hidden = False '取消隐藏
Application.Windows(1).ScrollRow = 3 '滚动窗口置顶
With sht.Cells.CurrentRegion '当前区域
c = .Cells(2, .Columns.Count).End(4).Column - 1 '结束列
arr = .Range(.Cells(3, 1), .Cells(r, c)) '区域数组
x = WorksheetFunction.CountIf(Range("A1:A" & r), 1) '总页数
End With
ReDim brr(1 To x, 1): n = 1
For i = 1 To x
m = 0
For j = n To r - 2
If m > 0 And j <= r - 2 Then '***
If arr(j, 1) = 1 Then
n2 = j - 1: Exit For '结束1
ElseIf arr(j, 1) = "" Then
If arr(j, 2) <> "" Then
n1 = j: Exit For '结束2
End If
End If
Else: n1 = j '*****
End If
If arr(j, 1) = 1 Then m = j
Next
If n1 > n2 Then n = n1 Else n = n2
brr(i, 0) = m + 2 '区域开始位置
brr(i, 1) = n + 2 '区域结束位置
If n1 > n2 Then n = n1 Else n = n2 + 1
Next
For i = 1 To UBound(brr)
If i > 1 Then
Set rng = sht.Range(sht.Cells(3, c), sht.Cells(brr(i - 1, 1), c))
rng.EntireRow.Hidden = True '隐藏区域
End If
sht.Range(sht.Cells(1, 1), sht.Cells(brr(i, 1), c)).CopyPicture 1, 2 '复制区域
With sht.ChartObjects.Add(0, 0, 800, 28 * (brr(i, 1) - brr(i, 0) + 3)).Chart '添加图表
.Parent.Select '选择图表
.Paste '粘贴区域
.Export "C:\Users\Administrator\Desktop\AA\" & i & ".png" '导出图片
.Parent.Delete '删除图表
End With
Next
sht.Cells.EntireRow.Hidden = False '取消隐藏
Application.Windows(1).ScrollRow = 3 '滚动窗口置顶
Set sht = Nothing '释放对象
Set rng = Nothing
End Sub |
|