Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA循环调试-下一步不带For_Vba_Excel - Fatal编程技术网

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")