[英]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”當前的格式似乎可以接受六個位置的“盤子”。 如果您的意圖是這六個應該來自主工作表“摘要”的不同行,那么這比將每行的六個副本打印出來要復雜一些。
隨着工作表之間的所有來回切換,值得使用一些Range
和Worksheet
變量來防止屏幕太忙。
有許多活動需要分開:
所以我的整體方案如下:
' 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.