如何使用For-Loop重复VBA代码

我需要帮助执行H列的每个ID的第一个代码。我已经尝试build立一个“循环”和“下一个”无济于事。

我想build立一个“i =行号”types,并有一个“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循环如何在这里工作的想法。 应该指出,循环并不是在表单之间复制和粘贴值的最有效的方法。 我认为其他一些解决scheme更好地解决了有效的方法:

 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 

这不是一个好的解决scheme,因为它是硬编码来做第2行到第260行。但是使用一些variables可以使它变得更好。 希望这有些帮助…

这里是一个子行:

 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 

为了只复制数据,就像你的代码所build议的那样( xlPasteValues ),像这样做:

 Sheets("Weekly Productivity").Range("H2:H260") = Sheets("Specialist Roster").Range("H2:H260").Value 

没有循环。

你甚至可以在没有代码的情况下做,只需要在“每周生产力”中input一个公式:

在单元格H2中:

 ='Specialist Roster'!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