如何在vba中的新选项卡上复制excel公式

时间:2015-04-08 18:03:00

标签: excel vba excel-vba

我有一个包含2个标签的Excel工作簿。 “AccountDetail”选项卡包含多个可变数据行(包括一个标题行)。 “MasterDetail”选项卡有2行数据(第1行是标题行,第2行是公式行)。

我想计算AccountDetail选项卡上的数据行数,并在MasterDetail选项卡上复制公式,以获取与AccountDetail选项卡中的数据相同的行数。这就是我到目前为止所拥有的。我可以使用一些建议。

Sub CopyFormulas_Down()
Dim LastRow As Long

EndRow = AccountDetail.Range("A" & Rows.Count).End(xlUp).Row
MasterDetail.Range("A2:AZ2").AutoFill Destination:=Range("A2:AZ" &   LastRow)

End Sub

1 个答案:

答案 0 :(得分:0)

首先,您的代码中似乎有一个简单的拼写错误。你声明LastRow你也传递给了AutoFill()函数,但是你使用EndRow来存储从你的计数中得到的东西,所以对于一个你不是获得预期的价值。

此外,我自己也发现了一种有时不可预测的行为,具体取决于使用的Excel版本。有不同的方法可以计算Sheet中的行数,但是根据我对不同版本的经验,这是我用来获取最后一行的方法:

' get last row of worksheet
Public Function GetWSLastRow(ByRef wsSheet As Worksheet) As Double

    ' simply return 0 if no Worksheet was passed
    If IsNothing(wsSheet) Then
        GetWSLastRow = 0
        Exit Function
    End If

    ' first we try using Find(any) to get last row
    On Error GoTo errLRFindError
    GetWSLastRow = wsSheet.Cells.Find("*", , , , xlByRows, xlPrevious).Row
    ' if there was no error we will just exit function
    ' otherwise we jump to next method of determining last row

endGetLastRow:
    On Error GoTo 0
    Exit Function

errLRFindError:
    ' try getting last row by querying for UsedRange's row count
    On Error GoTo errLRUsedRangeError
    GetWSLastRow = wsSheet.UsedRange.Rows.Count
    Resume endGetLastRow

errLRUsedRangeError:
    ' last chance rows count, but you should not end up here anyhow
    GetWSLastRow = wsSheet.Rows.Count
    Resume endGetLastRow

End Function

然后使用此函数,您的代码将如下所示:

Sub CopyFormulas_Down()
    Dim LastRow As Long
    LastRow = GetWSLastRow(AccountDetail)
    MasterDetail.Range("A2:AZ2").AutoFill Destination:=Range("A2:AZ" &   LastRow)
End Sub

甚至更短:

Sub CopyFormulas_Down()
    MasterDetail.Range("A2:AZ2").AutoFill Destination:=Range("A2:AZ" &   GetWSLastRow(AccountDetail))
End Sub

希望就是这样。