Excel VBA-重复行

Excel VBA-重复行,excel,vba,Excel,Vba,我需要将一行公式复制N次。N由不同图纸上的行数定义。每行的公式都是唯一的,但我认为autofill可以处理这个问题 在“数据表”中: 第1行是标题 第2行有一行我想复制“Cnt”时间,从第3行开始。 第2行的单元格对于第-=行是唯一的!C2 我需要第2行与第2行相同,但增加行号 这样我就可以拿到证书了!第3行的C3和=凭证!第4排C4 (其他公式更复杂,但遵循相同的模型) 函数完成后,“DestSheet”将有第2行开始的“Cnt”行 我很接近我在这个网站上找到的代码 Sub AddRows(C

我需要将一行公式复制N次。N由不同图纸上的行数定义。每行的公式都是唯一的,但我认为autofill可以处理这个问题

在“数据表”中: 第1行是标题 第2行有一行我想复制“Cnt”时间,从第3行开始。 第2行的单元格对于第-=行是唯一的!C2 我需要第2行与第2行相同,但增加行号 这样我就可以拿到证书了!第3行的C3和=凭证!第4排C4 (其他公式更复杂,但遵循相同的模型) 函数完成后,“DestSheet”将有第2行开始的“Cnt”行

我很接近我在这个网站上找到的代码

Sub AddRows(Cnt As Integer, DestName As String)

    Dim DestSheet As Worksheet
    Dim i As Integer


    Set DestSheet = Worksheets(DestName)

    For i = 1 To Cnt

        Sheets(DestName).cell(i + 2, 1).AutoFill _
              Destination:=Range(LastRow)
    Next i
End Sub ' AddRows

您不需要使用自动填充循环:

Sub AddRows(Cnt As Integer, DestName As String)

    Dim DestSheet As Worksheet
    Set DestSheet = Worksheets(DestName)

    DestSheet.Cells(2, 1).AutoFill _
              Destination:=DestSheet.Cells(2, 1).Resize(Cnt)

End Sub
以上内容将把A2填充到CNT中的行数。如果你想把第2行填得满满的,用这个

Sub AddRows(Cnt As Integer, DestName As String)

    Dim DestSheet As Worksheet
    Set DestSheet = Worksheets(DestName)
    Dim colcnt As Long
    With DestSheet
        colcnt = .Cells(2, .Columns.Count).End(xlToLeft).Column

        .Range(.Cells(2, 1), .Cells(2, colcnt)).AutoFill _
              Destination:=.Range(.Cells(2, 1), .Cells(2, colcnt)).Resize(Cnt)
    End With
End Sub
正如ZygD所解释的,由于子行中的变量,它不能单独运行,必须调用它

Sub CallAddRows()
Dim rwcnt as integer
dim DestShtNme as String

rwcnt = 20
DestShtNme = "Sheet1" 'Change to your sheet.

AddRows rwcnt, DestShtNme

End Sub

我假设在您的代码中,您正在迭代各种工作表,并调用此sub发送以添加行。以上只是一个例子。如何将这两个变量传递到AddRows子系统取决于您。重要的一点是将变量传递给子对象。

您不需要使用自动填充循环:

Sub AddRows(Cnt As Integer, DestName As String)

    Dim DestSheet As Worksheet
    Set DestSheet = Worksheets(DestName)

    DestSheet.Cells(2, 1).AutoFill _
              Destination:=DestSheet.Cells(2, 1).Resize(Cnt)

End Sub
以上内容将把A2填充到CNT中的行数。如果你想把第2行填得满满的,用这个

Sub AddRows(Cnt As Integer, DestName As String)

    Dim DestSheet As Worksheet
    Set DestSheet = Worksheets(DestName)
    Dim colcnt As Long
    With DestSheet
        colcnt = .Cells(2, .Columns.Count).End(xlToLeft).Column

        .Range(.Cells(2, 1), .Cells(2, colcnt)).AutoFill _
              Destination:=.Range(.Cells(2, 1), .Cells(2, colcnt)).Resize(Cnt)
    End With
End Sub
正如ZygD所解释的,由于子行中的变量,它不能单独运行,必须调用它

Sub CallAddRows()
Dim rwcnt as integer
dim DestShtNme as String

rwcnt = 20
DestShtNme = "Sheet1" 'Change to your sheet.

AddRows rwcnt, DestShtNme

End Sub

我假设在您的代码中,您正在迭代各种工作表,并调用此sub发送以添加行。以上只是一个例子。如何将这两个变量传递到AddRows子系统取决于您。重要的一点是将变量传递给sub。

这就是我想到的:

sub x()
NbrRows = Sheets(SrcName).Range("A" & Rows.Count).End(xlUp).Row  ' get the number of rows on the  sheet to know how many rows to add to the dest sheet
If NbrRows > 1 Then
    Call AddRows(NbrRows, DestName)
End If

end sub

Sub AddRows(Cnt As Integer, DestName As String)

Dim DestSheet As Worksheet
Dim Dest As String


Set DestSheet = Worksheets(DestName)
' DestSheet.Activate

Dest = "3:" & Cnt

Sheets(DestName).Rows("2:2").Select
Selection.Copy
Sheets(DestName).Rows(Dest).Select
Sheets(DestName).Paste
Sheets(DestName).Range("A2").Select
Application.CutCopyMode = False

End Sub添加行

这是我想到的:

sub x()
NbrRows = Sheets(SrcName).Range("A" & Rows.Count).End(xlUp).Row  ' get the number of rows on the  sheet to know how many rows to add to the dest sheet
If NbrRows > 1 Then
    Call AddRows(NbrRows, DestName)
End If

end sub

Sub AddRows(Cnt As Integer, DestName As String)

Dim DestSheet As Worksheet
Dim Dest As String


Set DestSheet = Worksheets(DestName)
' DestSheet.Activate

Dest = "3:" & Cnt

Sheets(DestName).Rows("2:2").Select
Selection.Copy
Sheets(DestName).Rows(Dest).Select
Sheets(DestName).Paste
Sheets(DestName).Range("A2").Select
Application.CutCopyMode = False

End Sub添加行

什么是
范围(LastRow)
您知道如何使用您的
子行
?您知道为了调用它,您需要创建一个单独的子例程吗?是的-这是一个将由其他子例程调用的子例程,这就是我传入参数的原因。我是一个老的C程序员(Visual C,C++等)。但对VBA来说是新的。我正在为一些方法和它们的工作原理而挣扎。有什么理由我不应该使用被调用的子程序吗?什么是
Range(LastRow)
你知道如何使用你的
sub
?您知道为了调用它,您需要创建一个单独的子例程吗?是的-这是一个将由其他子例程调用的子例程,这就是我传入参数的原因。我是一个老的C程序员(Visual C,C++等)。但对VBA来说是新的。我正在为一些方法和它们的工作原理而挣扎。有什么理由我不应该使用所谓的子程序吗?现在它更值得一试!答案是正确的,但我只是怀疑OP是否知道如何调用这种sub(他说他在这个网站上找到了代码,但他没有说他知道如何使用它)。它需要说明参数,并且只能从另一个子公司进行@ZygD是的,我假设OP知道他们在做什么,但我在编辑中添加了一个快速的简介。现在它更值得投票!答案是正确的,但我只是怀疑OP是否知道如何调用这种sub(他说他在这个网站上找到了代码,但他没有说他知道如何使用它)。它需要说明参数,并且只能从另一个子系统执行@ZygD是的,我假设OP知道他们在做什么,但我在编辑中添加了一个快速的简介。