也许我想在这里做太多,但我已经工作了好几个小时而没有运气。我希望你能提供帮助。
我正在创建一个函数,其唯一参数是同一工作簿中另一个工作表上的命名范围。我的问题是我无法弄清楚如何将该名称传递给函数并使用它。
我的目标是调用函数来对另一个工作表上命名范围指定的列求和,称为客户付款。
这是我的代码:
Function PayPerMonth()
PayPerMonth = Application.WorksheetFunction.Sum(Worksheets("Client Payments").Range("C:C"))
End Function
我得到一个正确的总数,但当然我在函数中指定了列。不太有用。
以下是我尝试的不起作用:
Function PayPerMonth(ColumnToAdd)
PayPerMonth = Application.WorksheetFunction.Sum(Worksheets("Client Payments").Range("ColumnToAdd"))
End Function
当我删除ColumnToAdd周围的引号以及我尝试过的许多其他变体时,它不起作用。
我想要做的是输入= PayPerMonth(MBPADV)或= PayPerMonth(SBTSADV)等来调用函数并瞄准右列,其中MBPADV和SBTSADV被命名为列。
我没有挂断使用列名。它只是让它更具可读性(无论如何!)。
可以这样做吗?
答案 0 :(得分:0)
Range("named range")
会返回 WorkBook 中的范围,因此最好将其传递到需要范围的函数中。
假设您在工作簿中有一个名为ColumnToAdd
的命名范围,这应该有效:
Function PayPerMonth(ColumnToAdd)
PayPerMonth = Application.WorksheetFunction.Sum(Range("ColumnToAdd")
End Function
每条评论更新:
Function PayPerMonth(ColumnToAdd As Range)
PayPerMonth = Application.WorksheetFunction.Sum(Range(ColumnToAdd))
End Function
用法:
Dim MyRange as Range
MyRange = Sheet.Columns("C")
Amount = PayPerMonth(MyRange)
注意:
您的函数调用将返回一个变体。您可能需要在As Integer
末尾声明As Single
,As Float
或Function PayPerMonth(ColumnToAdd As Range)
以帮助A)加快处理速度,因为Excel不会花时间试图找出它使用的变量类型,以及B)在维护代码时自己/下一个编码器 - 明确使代码更具可读性。