【问题标题】:Excel macro loop through rows and copy to another sheetExcel宏循环遍历行并复制到另一张工作表
【发布时间】:2013-11-08 11:47:48
【问题描述】:

我是 VBA 新手,并试图在 Excel 中实现这一点:

我有一张 sheet1,其中有带有值的行。我创建了一个按钮,它执行并将第一行数据复制到另一个工作表(Sheet2),复制到一些预定义的单元格中(即单元格 A1 中的值进入例如 B3)。然后我要把它保存成pdf。

现在我希望我的代码更加动态,并为 Sheet1 中的每一行执行此操作。因此,首先将 A1-D1 中的所有值复制到 sheet2,创建 pdf,然后将下一行 (A2-D2) 复制到 sheet 2,创建 pdf,依此类推。

我怎样才能做到这一点?

我的代码适用于一行:

Private Sub CommandButton1_Click()

 'Get name
   Worksheets("Sheet2").Range("B5").Value = Worksheets("Sheet1").Range("V2").Value &     " " & Worksheets("Sheet1").Range("W2").Value

 'Get adress
 Worksheets("Sheet2").Range("B6").Value = Worksheets("Sheet1").Range("AB2").Value

 'Create pdf for this row
 RDB_Worksheet_Or_Worksheets_To_PDF ()


End Sub 

【问题讨论】:

  • 你能告诉我们你尝试了什么吗?要求代码的问题必须表明对要解决的问题的最低理解。包括尝试的解决方案、它们为什么不起作用以及预期的结果。另见:Stack Overflow question checklist
  • 您介意提供您目前拥有的宏代码吗?
  • 添加了我当前的代码
  • 现在 sheet1 中的源数据在哪里,即范围,需要复制到其他工作表。如果源数据在 a1:d1 中意味着我有一个解决方案。

标签: loops excel pdf vba


【解决方案1】:

您需要一个循环来遍历 V 列中的所有单元格。

Private Sub CommandButton1_Click()

    Dim ws1 As Worksheet
    Set ws1 = Sheets(1)

    Dim ws2 As Worksheet
    Set ws2 = Sheets(2)

    Dim cell As Range
    For Each cell In ws1.Range("V2:V" & ws1.Range("V" & Rows.Count).End(xlUp).Row)

        ws2.Range("B5") = cell & Chr(32) & cell.Offset(0, 1)
        ws2.Range("B6") = cell.Offset(0, 6)

        'RDB_Worksheet_Or_Worksheets_To_PDF ()

    Next

End Sub

【讨论】:

  • 谢谢,但我将使用我的代码,因为我了解那里发生了什么:)
  • 今天过得不好?我自己找到了解决方案,我会说这是一件好事。顺便说一句,我已经阅读了您的代码-对于像我这样的新手来说,更容易理解您自己的代码吗?感谢您的帮助,我只是没有使用您的代码 atm。放松。
【解决方案2】:

解决了!

有效的最终代码(对我而言):

Dim pointer As Integer
pointer = 2

Do While Not IsEmpty(Worksheets("Sheet1").Range("V" & pointer))

Private Sub CommandButton1_Click()

 'Get name
   Worksheets("Sheet2").Range("B" & pointer).Value = Worksheets("Sheet1").Range("V" & pointer).Value &     " " & Worksheets("Sheet1").Range("W"& pointer).Value

 'Get adress
 Worksheets("Sheet2").Range("B" & pointer).Value = Worksheets("Sheet1").Range("AB" & pointer).Value

 'Create pdf for this row
 RDB_Worksheet_Or_Worksheets_To_PDF ()

pointer = pointer + 1
Loop


End Sub 

【讨论】:

  • 你说得对,我太快把答案贴在这里了。更正了解决方案代码。
猜你喜欢
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
相关资源
最近更新 更多