如何正确订购照片

时间:2019-05-02 13:59:04

标签: excel vba

我正在用Excel编写一个程序,该程序会从目录中拾取所有照片并将它们放入程序中。主要是我需要将这些照片分开放置和排序,因为此存档将被打印和裁切。

我想做的是,在VBA中执行一种算法,该算法试图将这些照片排在同一行中5张,下一张5张,下一张5张...

这看起来很简单,但是我不知道为什么我的程序给我一些问题。

它有效,并且我已经确定了故障。问题是,当我不得不更改行时,下一行的第一张照片插入到与最后一行的最后一张照片相同的位置。我的意思是,如果我有10张照片1,2,3,4,5,6,7,8,9,10 1 2 3 4 5(下一行) 6 7 8 9 10

但是我得到的是:

1 2 3 4 56(下一个代码一个)(下一行)      7 8 9 10

这让我感到惊讶,因为下一行中第一张照片的存储空间仍然为空,但照片在该行中,然后粘贴了另一张照片。

这是我的代码,试图订购图像:

Count = 0
columna = 2
i = 0

cll = 1
Sheets("Hoja3").Select


For Each celda In rng


If Len(Trim(celda)) > 0 Then

        'defino la celda equivalente de la columna A y la selecciono
        If columna <= 10 Then
      '   MsgBox (columna)
        Set r1 = Cells(cll, columna)

        columna = columna + 2
        Else
        columna = 2
        cll = cll + 2
        Set rl = Cells(cll, columna)

        columna = columna + 2



        End If


        r1.Select


        'se inserta la imagen de la ruta definida


        Set Fotos = ActiveSheet.Pictures.Insert(Ruta & celda.Value)

        'con la posición definida respecto a la celda de la columna B seleccionada

        With Fotos

            .Top = r1.Top

            .Width = .Width / 2.5

            .Height = .Height / 2.5

            .Left = r1.Left + (r1.Width - Fotos.Width) / 3

            .ShapeRange.LockAspectRatio = msoFalse

             r1.EntireRow.RowHeight = .Height

            .Placement = xlMoveAndSize

        End With

    r1.Select

End If

Next celda

1 个答案:

答案 0 :(得分:0)

尝试一下:

Dim pos As Long
pos = 0

For Each celda In Rng
    If Len(Trim(celda)) > 0 Then
    Set Fotos = Sheets("Hoja3").Pictures.Insert(Ruta & celda.Value)
    Set r1 = Sheets("Hoja3").Cells(((pos \ 5) + 1) * 2, (pos Mod 5) + 1 * 2)
        With Fotos
            .Top = r1.Top
            .Width = .Width / 2.5
            .Height = .Height / 2.5
            .Left = r1.Left + (r1.Width - Fotos.Width) / 3
            .ShapeRange.LockAspectRatio = msoFalse
            .Placement = xlMoveAndSize
            r1.EntireRow.RowHeight = .Height
       End With
    pos = pos + 1
    End If
Next