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

时间:2015-06-19 18:55:17

标签: excel vba excel-vba

我找到了以下代码来模拟MS Word邮件合并功能,但只能在Excel单元格中使用。

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

但是,我无法弄清楚如何将此应用于从每个行向另一个范围发送一系列三个单元格(在Employees表的 A:C 列中) X50:X52 中的三个单元格( Sheet1 ,而不仅仅是一个单元格。有任何想法吗?

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

1 个答案:

答案 0 :(得分:1)

您可以使用Application.Transpose将数据行翻转为一列数据。下面我还使用ResizeA:C列中获取3个单元格。 Resize比尝试使用&和列字母构建范围容易得多。它返回一个新的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

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