我有一个包含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
答案 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
希望就是这样。