VBA循环调试-下一步不带For
基本上,我试图复制并插入第二张纸上的某一区域的单元格,只要单元格不为空,程序就会循环通过第一张纸上的某一区域的单元格。我需要将复制和插入范围更改为每个循环的新复制和插入单元格。任何帮助都将不胜感激VBA循环调试-下一步不带For,vba,excel,Vba,Excel,基本上,我试图复制并插入第二张纸上的某一区域的单元格,只要单元格不为空,程序就会循环通过第一张纸上的某一区域的单元格。我需要将复制和插入范围更改为每个循环的新复制和插入单元格。任何帮助都将不胜感激 Private Sub CommandButton1_Click() Dim ws As Worksheet Dim rng As Range Dim i As Integer Dim j As Integer For i = 12 To 24
Private Sub CommandButton1_Click()
Dim ws As Worksheet
Dim rng As Range
Dim i As Integer
Dim j As Integer
For i = 12 To 24
Set ws = ThisWorkbook.Sheets("Input")
With ws
If Not IsEmpty(Cells(i, 2)) Then
For j = 10 To -2
Set ws = ThisWorkbook.Sheets("Budget Output #2")
With ws
Set rng = .Range("Cell(5,i-j):Cell(17,i-j+1)")
rng.Copy
rng.Offset(0, 2).Insert Shift:=xlToRight
rng.Offset(0, 2).ColumnWidth = 20
Application.CutCopyMode = False
Next j
Next i
End If
End With
End With
End Sub
我会让你找出答案的。以下是正确的结构:
For i ....
For j ...
with ws
end with
next j
next i
一行不需要
With
语句。这会干净得多。对于两个工作表,还应使用两个工作表变量。最后,我清理了您的范围(单元格,单元格)
语法。尽管如此,由于j=10到-2的,这仍然不起作用。要向后移动,必须使用步骤-#
您有两个ws变量,可能会正确启动代码
Dim ws As Worksheet, sh As Worksheet
Set ws = Sheets("Budget Output #2")
Set sh = Sheets("Input")
使用适当的缩进可能会告诉您哪里出了问题。任何时候你有一个End
something,你应该在开始和结束之间缩进代码,这样你就会注意到。像这样?对于j=10到-2步骤-1,设置rng=wsOut.Range(单元格(5,i-j),单元格(17,i-j+1))嗯,调试器会突出显示“Set rng=wsOut.Range(单元格(5,i-j),单元格(17,i-j+1)),并显示一个错误“方法“对象范围”工作表失败。。。有什么想法吗?很抱歉,如果这个请求超出了i-j
的范围,那么在i
变化太大的情况下,i-j
的内容是很棘手的。对于i
的每次迭代,您实际上想做什么?基本上,单元格12到24中要么有员工姓名,要么没有员工姓名。对于每次迭代,如果在第一个工作表的单元格12-24中有一名员工,则会遍历该列表,并在第二个工作表上最新插入的列之后复制和插入两列。需要在哪里添加这些列?你的j循环现在没有多大意义。
Dim ws As Worksheet, sh As Worksheet
Set ws = Sheets("Budget Output #2")
Set sh = Sheets("Input")