如何使用For循环重复VBA代码

如何使用For循环重复VBA代码,vba,excel,loops,for-loop,Vba,Excel,Loops,For Loop,我需要帮助为H列中的每个ID执行第一个代码。我试图建立一个“循环”和一个“for next”,但没有成功 我想建立一种类型的“I=行编号”,并有一个“I+1”命令,该命令将对列中的每个单元格执行相同的任务 衷心感谢您的帮助 Sub GenerateAll_1() 'Copy the first ID in the list (cell H2) and paste it Sheets("Specialist Roster").Select Range("H2").Select

我需要帮助为H列中的每个ID执行第一个代码。我试图建立一个“循环”和一个“for next”,但没有成功

我想建立一种类型的“I=行编号”,并有一个“I+1”命令,该命令将对列中的每个单元格执行相同的任务

衷心感谢您的帮助

Sub GenerateAll_1()

'Copy the first ID in the list (cell H2) and paste it
    Sheets("Specialist Roster").Select
    Range("H2").Select
    Selection.Copy
    Sheets("Weekly Productivity").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'My code that saves as pdf based on other criteria goes here

'REPEAT task for the cells H3, H4... H260

这个示例实际上只是让您了解for循环在这里是如何工作的。应注意,循环并不是在图纸之间复制和粘贴值的最有效方式。我认为其他一些解决方案可以更好地解决以下问题:

For i = 2 To 260
Sheets("Specialist Roster").Range("H" & i).Copy
'here you need to specify what range you want to copy to
Sheets("Weekly Productivity").Range("H" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
 Next i

这不是一个很好的缩放解决方案,因为它是硬编码的,用于执行第2行到第260行。但是使用一些变量可以使它变得更好。希望这对您有所帮助。

这个示例实际上只是让您了解for循环在这里是如何工作的。应注意,循环并不是在图纸之间复制和粘贴值的最有效方式。我认为其他一些解决方案可以更好地解决以下问题:

For i = 2 To 260
Sheets("Specialist Roster").Range("H" & i).Copy
'here you need to specify what range you want to copy to
Sheets("Weekly Productivity").Range("H" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
 Next i

这不是一个很好的缩放解决方案,因为它是硬编码的,用于执行第2行到第260行。但是使用一些变量可以使它变得更好。希望这有点帮助…

这里有一个单线接头:

Sub GenerateAll_1()
    Sheets("Specialist Roster").Range("H2:H" & Rows.Count).Copy Sheets("Weekly Productivity").Range("H2")
End Sub
不需要循环。如果要避免第260行下方列H中的值,则:

Sub GenerateAll_1()
    Dim r1 As Range, r2 As Range

    Set r1 = Sheets("Specialist Roster").Range("H2:H260")
    Set r2 = Sheets("Weekly Productivity").Range("H2")

    r1.Copy r2
End Sub

这是一个单线接头:

Sub GenerateAll_1()
    Sheets("Specialist Roster").Range("H2:H" & Rows.Count).Copy Sheets("Weekly Productivity").Range("H2")
End Sub
不需要循环。如果要避免第260行下方列H中的值,则:

Sub GenerateAll_1()
    Dim r1 As Range, r2 As Range

    Set r1 = Sheets("Specialist Roster").Range("H2:H260")
    Set r2 = Sheets("Weekly Productivity").Range("H2")

    r1.Copy r2
End Sub

要仅复制数据,如代码所示(
xlPasteValues
),请执行以下操作:

Sheets(“每周生产率”)。范围(“H2:H260”)=
表(“专家名册”)。范围(“H2:H260”)。值
没有回路

您甚至可以不编写代码,只需在“每周生产力”中添加一个公式:

在单元H2中:

=“专家名册”!氢
。。。并尽可能向下拖动

如果您真的需要循环(因为您希望根据中间结果执行其他任务),请执行以下操作:

Sub GenerateAll_1()
    Dim source As Range ' cell from which you copy
    Dim target As Range ' cell to which you copy

    Set target = Sheets("Weekly Productivity").Range("H1")

    For Each source In Sheets("Specialist Roster").Range("H2:H260")
        target = source.Value ' copy the value (only)
        Set target = target.Offset(1) ' let target point to next cell
        ' perform other tasks here
    Next

End Sub

要仅复制数据,如代码所示(
xlPasteValues
),请执行以下操作:

Sheets(“每周生产率”)。范围(“H2:H260”)=
表(“专家名册”)。范围(“H2:H260”)。值
没有回路

您甚至可以不编写代码,只需在“每周生产力”中添加一个公式:

在单元H2中:

=“专家名册”!氢
。。。并尽可能向下拖动

如果您真的需要循环(因为您希望根据中间结果执行其他任务),请执行以下操作:

Sub GenerateAll_1()
    Dim source As Range ' cell from which you copy
    Dim target As Range ' cell to which you copy

    Set target = Sheets("Weekly Productivity").Range("H1")

    For Each source In Sheets("Specialist Roster").Range("H2:H260")
        target = source.Value ' copy the value (only)
        Set target = target.Offset(1) ' let target point to next cell
        ' perform other tasks here
    Next

End Sub


对于范围内的每个单元格
那么,您需要复制H列中的每个单元格,并将其放入“每周生产率”表中?我想在下一个可用的地方?你想完成什么?如果只需要在H中执行所有单元格,为什么不复制整个列(
范围(“H:H”)。复制
)?很抱歉造成混淆。。。“每周生产力”是为每位专家单独生成的报告。每当在输入单元格中输入员工ID时,就会填充该员工的详细信息。目前,为了生成所有PDF,必须手动输入ID或从下拉列表中选择ID。“专家名册”中的H列列出了所有在职专家的ID号。我试图通过告诉代码“浏览此列表并为列表中的每个ID创建一个PDF”来自动化为每个人生成PDF的过程。
对于范围内的每个单元格
因此,您需要复制H列中的每个单元格,并将其放在“每周生产效率”表中?我想在下一个可用的地方?你想完成什么?如果只需要在H中执行所有单元格,为什么不复制整个列(
范围(“H:H”)。复制
)?很抱歉造成混淆。。。“每周生产力”是为每位专家单独生成的报告。每当在输入单元格中输入员工ID时,就会填充该员工的详细信息。目前,为了生成所有PDF,必须手动输入ID或从下拉列表中选择ID。“专家名册”中的H列列出了所有在职专家的ID号。我试图通过告诉代码“浏览此列表并为列表中的每个ID创建一个PDF”来自动为每个人生成PDF。我知道,我只是出于懒惰而复制并粘贴了OP。如果你清理
。选择
,我将拿走dv。你得到了一笔交易!仍然有一个,第二行和第三行应该是一个
表(“专家名册”)。范围(“H”和i)。复制
您也可以编辑它,这样您就不必选择
表(“专家名册”)
如何
表(“专家名册”)。范围(“H”和i)。复制
或与sh一起使用
我知道,我只是出于懒惰复制并粘贴了OP。如果你清理
。选择
,我会拿走dv。你得到了一笔交易!仍然有一个,第二行和第三行应该是一个
表(“专家名册”)。范围(“H”和i)。复制
您也可以编辑它,这样您就不必选择
表(“专家名册”)
如何
表(“专家名册”)。范围(“H”和i)。复制
或与sh一起使用
IMO,这是效率和易于维护的更好答案。在我看来,这是效率和易于维护的更好答案。我不需要将整个H列粘贴到周报选项卡中。我需要把密码改成1。抓取第一个ID(H2);2.将该ID号粘贴到每周选项卡(H1);3.另存为PDF;4) 返回花名册,抓取下一个ID号(H3)并将其粘贴到每周选项卡(H2);5.对花名册H列中列出的所有ID重复同样的任务。ArcherBird的示例工作得很好,但由于某种原因,代码在生成了一些PDF后停止。我认为这是与生成PDF更相关的问题,在我看来值得提出一个新问题。您应该在那里指定库