【问题标题】:Sheet name as variable to get last row from function工作表名称作为变量以从函数中获取最后一行
【发布时间】:2018-08-24 15:55:45
【问题描述】:

我可以将工作表名称作为变量传递给函数以返回给定工作表的最后一行吗?如果是这样,代码的结构会是什么样子?我将如何传递变量?我正在使用一个简单的函数

Function lastRow()

    With ActiveSheet
        lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With

End Function

在这里调用它

Sub CopyResults()

'Copy DP-CustomerDates
DPCustomerDates.Range("A1:D" & lastRow).Copy

我在多张纸上多次找到最后一行,并最初创建了该功能,以避免一遍又一遍地重新输入整个 with block。我正在根据我从这里和codereview 获得的一些重要信息来修改我的代码库,我被困在这个新问题上。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    将工作表作为参数传递:

    Function lastrow(ws As Worksheet) As Long
    
        With ws
            lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
        End With
    
    End Function
    

    然后这样称呼它:

    Sub CopyResults()
    
    'Copy DP-CustomerDates
    DPCustomerDates.Range("A1:D" & lastrow(DPCustomerDates)).Copy
    End Sub
    

    但是,如果您要多次使用同一个数字,而不是进行多次调用,请将返回值分配给一个变量并只调用一次。

    Sub CopyResults()
    Dim lstrw As Long
    lstrw = lastrow (DPCustomerDates)
    'Copy DP-CustomerDates
    DPCustomerDates.Range("A1:D" & lstrw).Copy
    End Sub
    

    【讨论】:

    • 感谢@Scott,但是当我尝试将返回值分配给变量时,出现编译错误。预期的函数或变量。 Sub CustomerData() Dim lRow As Long lRow = lastRow(CustomerData)
    • 确保您没有在调用函数的子程序中的某处声明lastRow。
    • 我确定。我注意到的是,如果我将 lrow 声明为 dim 或 public 并且在我正在工作的子系统之外,它会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    相关资源
    最近更新 更多