Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
Excel 尝试在循环中调用主sub中的sub。获取错误_Excel_Vba - Fatal编程技术网

Excel 尝试在循环中调用主sub中的sub。获取错误

Excel 尝试在循环中调用主sub中的sub。获取错误,excel,vba,Excel,Vba,我想在不使用剪贴板的情况下,以某种方式将数据从一个工作表复制到另一个工作表。为此,我尝试在主sub中调用sub并在循环中使用它。 如果我多次调用sub或在循环中调用sub,则会出现错误。如果我只打一次电话,效果很好。错误是: 运行时错误424“需要对象” 下面给出了我想要运行的代码 Sub CopyValues(rngSource As Range, rngTarget As Range) rngTarget.Resize(rngSource.Rows.Count, rngSourc

我想在不使用剪贴板的情况下,以某种方式将数据从一个工作表复制到另一个工作表。为此,我尝试在主sub中调用sub并在循环中使用它。 如果我多次调用sub或在循环中调用sub,则会出现错误。如果我只打一次电话,效果很好。错误是:

运行时错误424“需要对象”

下面给出了我想要运行的代码

Sub CopyValues(rngSource As Range, rngTarget As Range)
 
    rngTarget.Resize(rngSource.Rows.Count, rngSource.Columns.Count).Value = rngSource.Value
 
End Sub    
Sub Newsheet ()

 Numrows = Range("A1", Range("A1").End(xlDown)).Rows.Count
        
    ' Select cell a1.
    Range("A1").Select
    ' Establish "For" loop to loop "numrows" number of times.
    irow = 1
     
     Sheets.Add After:=ActiveSheet
      
     For RowCount = 1 To Numrows
            
            Call CopyValues(Sheet1.Range("A" & RowCount, "G" & RowCount), Sheet2.Range("A" & irow))
            
            Call CopyValues(Sheet1.Range("H" & RowCount, "AF" & RowCount), Sheet2.Range("A" & irow + 1))
            
            Call CopyValues(Sheet1.Range("AG" & RowCount, "BL" & RowCount), Sheet2.Range("A" & irow + 2))
            
            irow = irow + 3

      Next

End Sub

有什么方法可以做到这一点吗?

确保声明变量并为工作表创建变量:

Sub Newsheet()
    Dim sht1 As Worksheet
    Set sht1 = ActiveSheet
    
    Numrows = sht1.Range("A1", sht1.Range("A1").End(xlDown)).Rows.Count

' Establish "For" loop to loop "numrows" number of times.
    Dim irow As Long
    irow = 1

    Dim sht2 As Worksheet
    Set sht2 = Sheets.Add(After:=sht1)
    
    Dim RowCount As Long    
    For RowCount = 1 To Numrows
    
        Call CopyValues(sht1.Range("A" & RowCount, "G" & RowCount), sht2.Range("A" & irow))
        Call CopyValues(sht1.Range("H" & RowCount, "AF" & RowCount), sht2.Range("A" & irow + 1))
        Call CopyValues(sht1.Range("AG" & RowCount, "BL" & RowCount), sht2.Range("A" & irow + 2))
        
        irow = irow + 3
    
    Next

End Sub

不知道你到底想做什么。您添加了一个新的工作表,但从未对其执行任何操作。如果看到,目标范围在工作表2中。因此,我尝试从第1页复制值,并以某种方式将它们粘贴到第2页。我认为您假设
Sheet2
是对新页的引用,但情况并非如此。