簡體   English   中英

使用 VBA 復制和粘貼多個單元格

[英]Copy and Paste multiple cells with VBA

我正在嘗試自動化 Excel 工作表中的宏。 我在第一個工作表上有一個可變行數的大表,我需要為主工作表的每一行創建一些“板”(包含某些數據的 5 行組)(發布在附圖中) . 板需要像屏幕截圖一樣顯示,以便在.pdf 文件中導出(2 個在同一級別,直到最后一個)

這是我使用宏錄制和其他宏找到並且已經為我工作的代碼(pdf打印):

Sheets("Summary").Select
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
first_row = "A2"
sec_row = "F2"
For i = 1 To lastRow

Sheets("Foglio1").Select
Range("S3:V7").Select
Selection.Copy
Range("first_row:first_row+4").Select
ActiveSheet.Paste
Range("sec_row:sec_row+4").Select
ActiveSheet.Paste

i = i + 2
Next

在此之后,我有一個代碼部分,我將所選區域導出為 pdf(簡單並且正在工作)。

顯示所有板的第二個工作表

假設您的摘要表是這樣的

匯總表

然后嘗試

Option Explicit

Sub CreatePDF()

    Dim wb As Workbook, ws As Worksheet, wsPDF As Worksheet
    Dim iLastRow As Long, ar(1 To 5, 1 To 1), rng As Range
    Dim i As Long, r As Long, c As Integer, k As Integer
   
    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Summary")
    Set wsPDF = wb.Sheets("Foglio1")
    'wsPDF.Cells.Clear

    ' fixed
    ar(1, 1) = "Factory s.r.l."
    ar(2, 1) = "Ph. +39 0000 00000"
    ar(3, 1) = "Web www.website.net"
   
    iLastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
    r = 2 ' start row
    c = 1 ' column A
    For i = 2 To iLastRow
        ar(4, 1) = "JOB " & ws.Cells(i, "A")
        ar(5, 1) = "ORDER " & ws.Cells(i, "B")
       
        ' fill plate
        Set rng = wsPDF.Cells(r, c).Resize(5, 1)
        rng.Value2 = ar
       
        ' merge cells
        For k = 1 To 5
            With rng.Cells(k, 1).Resize(1, 4)
                .Merge
                .HorizontalAlignment = xlCenter
                .Font.Bold = True
            End With
        Next
        
        ' move to next plate
        If i Mod 2 = 0 Then
            c = 6 ' column F
        Else
            c = 1 ' column A
            r = r + 6
        End If
    Next
    MsgBox "Done"
End Sub

好的,目前您的代碼中有許多“我希望這會起作用”類型的部分,而且現在的問題可能比答案多。

您的 output 表“Foglio1”當前的格式似乎可以接受六個位置的“盤子”。 如果您的意圖是這六個應該來自主工作表“摘要”的不同行,那么這比將每行的六個副本打印出來要復雜一些。

隨着工作表之間的所有來回切換,值得使用一些RangeWorksheet變量來防止屏幕太忙。

有許多活動需要分開:

  • 從主表中獲取“板塊”信息
  • 適當地格式化
  • 更新匯總表
  • output 到 pdf 如果時間合適

所以我的整體方案如下:

' set up plate locations in output sheet Array("A2","F2","A8",...)
' ---- set up range of records to scan (ScanRange) (only column A, other data by .Offset)
For Each ACell in ScanRange
    ' ---- get data from this record e.g.
    phone = ACell.Offset(0,5).Text
    ' ---- fill next plate (Range) in output sheet e.g.
    whichPlate = whichPlate + 1 ' & cycle
    Set plate = Range(plates(whichPlate))
    plate.Offset(1,0).Value = "Ph. " & phone 'etc.
    ' ---- send to pdf if appropriate
    ' ---- clean up output sheet if needed
Next ACell

' ---- send last batch to pdf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM