在打印每行的副本之前,最后一行和发送单元格范围的值

我发现下面的代码,模拟MS Word邮件合并function,但专门在Excel单元格中。

它的目的是打印一个范围内的每一行的单个单元格值,以便在打印之前将其发送到另一个单元格,以便可以打印多个副本,每个副本具有不同的名称以便合理化,例如将打印时间卡分发给每个员工。

然而,我还没有能够找出如何应用这个发送一个范围的三个单元格(在Employees列表中的A:C列)到另一个范围的三个单元格( X50:X52 Sheet1 X50:X52 ,而不是一个细胞。任何想法?

 Sub Macro1() Dim lastRow As Integer ' Dim r As Integer lastRow = Sheets("Employees").Cells(Rows.Count, "A").End(xlUp).Row For r = 1 To lastRow Sheets("Sheet1").Range("D1").Value = Sheets("Employees").Range("A" & r).Value ActiveWindow.SelectedSheets.PrintOutNext r End Sub 

您可以使用Application.Transpose将该行数据翻转成一列数据。 下面我也使用Resize从列A:C获取3个单元格。 Resize要比尝试用&和列字母构build范围容易得多。 它返回一个新的Range ,它是3列大,而不是以前的1列。

 Sub Macro1() Dim lastRow As Integer ' Dim r As Integer lastRow = Sheets("Employees").Cells(Rows.Count, "A").End(xlUp).Row For r = 1 To lastRow Sheets("Sheet1").Range("X50:X52").Value = _ Application.Transpose(Sheets("Employees").Range("A" & r).Resize(, 3).Value) ActiveWindow.SelectedSheets.PrintOutNext r Next r End Sub 

请注意,使用Rangeselect多个单元格并调用.Value ,您将获得一组值。 在这种情况下,数组是1行3列。 Application.Transpose将此数据转换为3行1列。