2015-12-01 147 views
0

我需要复制一个充满公式N次的行。 N由不同纸张上的行数定义。公式每行都是唯一的,但我认为自动填充将处理该公式。Excel VBA - 重复行

在“DestSheet”: 第1行是一个标题 第2行有我要复制“CNT”倍线,起于第3行 行2具有特有的行单元格 - =凭证! C2 我需要第2行与第2行相同,但增加行号 为了让我得到=第3行的Credledge!C3和= Credentials!第4行的C4 (其他公式更复杂 - 但遵循相同的模型) 当功能完成时,“DestSheet”将有“Cnt”行开始在第2行

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

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 
+0

什么是'范围(LASTROW)' – Davesexcel

+0

你知道如何使用你的'Sub'?你知道,为了打电话给你,你需要创建一个单独的子? – ZygD

+0

是的 - 这是一个将被其他子程序调用的子,所以我传入参数。我是一位老C程序员(Visual C,C++等)。但是VBA新手。我正在努力解决一些方法以及它们的工作方式。是否有我不应该使用被称为子例程的原因? – SkiBum

回答

2

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

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 

AS ZygD解释,因为在亚行的变量的,这不能独立运行,必须调用。

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

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

AddRows rwcnt, DestShtNme 

End Sub 

我想在你的代码是通过各种片迭代和调用此子送加线。以上只是一个例子。如何将两个变量传递给AddRows子项由您决定。重要的部分是变量get传递给sub。

+0

现在它更值得upvoting!答案是正确的,但我只是怀疑OP是否知道如何调用这种子(他说他在这个网站上找到了代码,但他没有说他知道如何使用它)。它需要声明参数,并且只能从另一个子项完成。 – ZygD

+1

@ZygD是的,我认为OP知道他们在做什么,但我为我的编辑添加了一个快速blurb。 –

1

这是我想出了:

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 

末子'AddRows