请教如何用VBA写一段代码将工作表中的图片重新排列,实现每两张图片可以打印在一页A4纸上

请教如何用VBA写一段代码将工作表中的图片重新排列,实现每两张图片可以打印在一页A4纸上。

img


Sub RearrangePictures()
    Dim ws As Worksheet
    Dim pic As Picture
    Dim rowCount As Integer
    Dim colCount As Integer
    Dim picCount As Integer

    Set ws = ThisWorkbook.Worksheets("Sheet1")  
    rowCount = 3  ' 
    colCount = 2  ' 
    picCount = 0

    For Each pic In ws.Pictures
       
        pic.Left = (picCount Mod rowCount) * (ws.PageSetup.PrintArea.Width / rowCount)
        pic.Top = (picCount \ rowCount) * (ws.PageSetup.PrintArea.Height / colCount)

        pic.ShapeRange.LockAspectRatio = msoFalse
        pic.Width = ws.PageSetup.PrintArea.Width / rowCount
        pic.Height = ws.PageSetup.PrintArea.Height / colCount
        picCount = picCount + 1
    Next pic
End Sub
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7556950
  • 除此之外, 这篇博客: 【VBA编程】VBA基础语法(一)中的 4、声明动态数组,一般在不确定往这个数组里存储多少个元素,也不知道数组的大小。 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    问题比较复杂,需要通过VBA来处理工作表中的图片并重新排列它们,以便每两张图片能够打印在一页A4纸上。以下是解决该问题的可能方式:

    1. 首先,需要遍历工作表,并找到所有的图片对象。可以使用Shapes属性来获取图片对象,然后使用循环遍历它们。以下是示例代码:
    Sub RearrangePictures()
        Dim ws As Worksheet
        Dim shp As Shape
    
        ' 遍历每个工作表
        For Each ws In ThisWorkbook.Worksheets
            ' 遍历每个图片对象
            For Each shp In ws.Shapes
                ' 在此处编写处理图片的代码
                ' 可以使用shp对象的属性和方法来修改图片的位置和大小
            Next shp
        Next ws
    End Sub
    
    1. 然后,需要计算每张图片在每一页A4纸上的位置和大小。可以使用工作表的PageSetup属性来获取和修改页面设置。以下是示例代码:
    Sub RearrangePictures()
        Dim ws As Worksheet
        Dim shp As Shape
        Dim pageNumber As Integer
        Dim row As Integer
        Dim column As Integer
        Dim top As Double
        Dim left As Double
        Dim width As Double
        Dim height As Double
    
        pageNumber = 1
        row = 1
        column = 1
    
        ' 遍历每个工作表
        For Each ws In ThisWorkbook.Worksheets
            ' 遍历每个图片对象
            For Each shp In ws.Shapes
                ' 计算图片在每一页A4纸上的位置和大小
                top = ws.PageSetup.TopMargin + (row - 1) * (ws.PageSetup.PageHeight - ws.PageSetup.TopMargin - ws.PageSetup.BottomMargin) / 2
                left = ws.PageSetup.LeftMargin + (column - 1) * (ws.PageSetup.PageWidth - ws.PageSetup.LeftMargin - ws.PageSetup.RightMargin) / 2
                width = (ws.PageSetup.PageWidth - ws.PageSetup.LeftMargin - ws.PageSetup.RightMargin) / 2
                height = (ws.PageSetup.PageHeight - ws.PageSetup.TopMargin - ws.PageSetup.BottomMargin) / 2
    
                ' 设置图片的位置和大小
                shp.Top = top
                shp.Left = left
                shp.Width = width
                shp.Height = height
    
                ' 更新行和列的计数器
                column = column + 1
                If column > 2 Then
                    column = 1
                    row = row + 1
                    If row > 2 Then
                        ' 超过每页的图片数量后,更新页码和行计数器
                        pageNumber = pageNumber + 1
                        row = 1
                    End If
                End If
            Next shp
        Next ws
    
        ' 打印设置
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    End Sub
    

    请注意,以上代码是基于以下假设条件编写的:

    • 每一页A4纸上只能打印两张图片。
    • 所有的图片对象都是正方形,并且其边长不超过页面的边长。

    如有需要,可以根据实际情况进行修改和调整。

    如果以上的解决方案不能满足你的需求,请告诉我具体的要求,我会尽力提供更准确的解决方案。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^