Как мне скопировать и вставить VBA, расположенную как матрицу? - PullRequest
0 голосов
/ 31 августа 2018

ребята!

У меня есть шаблон карточки, а затем я хочу создать печатные страницы, из них 175 - на каждой странице должно быть 3х3 карточки. Пока все хорошо, но у меня ошибка 1004 при вставке скопированных ячеек в новую «строку», если можно так выразиться. Следуйте коду:

Dim originalWs As Worksheet, ws As Worksheet
Dim wsRowCounter As Long, wsCollumCounter As Long, expansionSize As Long, cardRowSize As Long, cardCollumSize As Long
Dim horizontalCardsPage As Long, verticalCardsPage As Long, i As Long

Set originalWs = ActiveSheet
Set ws = Sheets.Add
wsRowCounter = 1
wsCollumCounter = 1
expansionSize = 175
cardRowSize = 13
cardCollumSize = 4
horizontalCardsPage = 3
verticalCardsPage = 3
originalWs.Activate


For i = 1 To expansionSize

    originalWs.Range("C14") = i
    originalWs.Range("B2:E14").Select
    Selection.Copy
    ws.Activate

    If wsCollumCounter >= (cardCollumSize * horizontalCardsPage) Then
        wsRowCounter = wsRowCounter + cardRowSize
        ws.Rows(((wsRowCounter - 1) * verticalCardsPage) + 1).PageBreak = xlPageBreakManual
        wsCollumCounter = 1
    End If

    ws.Cells(wsRowCounter, wsCollumCounter).Activate
    ActiveSheet.Paste
    wsCollumCounter = wsCollumCounter + cardCollumSize
    originalWs.Activate
Next i

1 Ответ

0 голосов
/ 31 августа 2018

Я не уверен на 100%, что это решит проблему, но это поможет избавиться от некоторой двусмысленности и еще много чего:

Dim originalWs As Worksheet, ws As Worksheet
Dim wsRowCounter As Long, wsCollumCounter As Long, expansionSize As Long, cardRowSize As Long, cardCollumSize As Long
Dim horizontalCardsPage As Long, verticalCardsPage As Long, i As Long

Set originalWs = ActiveSheet
Set ws = Sheets.Add
wsRowCounter = 1
wsCollumCounter = 1
expansionSize = 175
cardRowSize = 13
cardCollumSize = 4
horizontalCardsPage = 3
verticalCardsPage = 3

For i = 1 To expansionSize

    originalWs.Range("C14") = i

    If wsCollumCounter >= (cardCollumSize * horizontalCardsPage) Then
        wsRowCounter = wsRowCounter + cardRowSize
        ws.Rows(((wsRowCounter - 1) * verticalCardsPage) + 1).PageBreak = xlPageBreakManual
        wsCollumCounter = 1
    End If  

    'perform the copy/paste in one line:
    originalWs.Range("B2:E14").Copy Destination:=ws.Cells(wsRowCounter, wsCollumCounter)    

    wsCollumCounter = wsCollumCounter + cardCollumSize    
Next i
...