我有多个用户定义函数的工作簿,有时给一个#VALUE错误。我已确定,这些UDF得到#VALUE错误时具有类似表名称/标签的颜色另一个工作簿是在相同的时间与UDF的工作簿打开。的UDF的指使用工作簿内标签颜色来计算其值其他工作表。所以我的猜测是,这些UDF都给人一种#VALUE错误,因为它不能区分在不同的打开的工作簿类似的命名/彩色工作表的差异。
例如,两个打开的工作簿具有相同标签颜色给这些UDF一个#VAULE错误。我证实了这一点,只需打开与通用表名称和白色标签颜色的新工作表中,UDF的没有给这个错误。如预期,除了这种情况发生这些UDF否则正常工作。下面就是这样的情况下给这个错误的UDF的一个示例。我试图通过引用“的ThisWorkbook”来修复这个错误,但是这似乎并没有纠正错误。我甚至试过功能移动到“的ThisWorkbook”模块,但显然函数不此模块在Excel填充。我无法弄清楚如何解决这个问题。你的帮助是极大的赞赏!
Function ExpenseActualSum(Month)
Application.Volatile
ColumnNumber = Month.Column - 1
ExpenseMonthSum = 0
Dim WS As Worksheet
For Each WS In ThisWorkbook.Worksheets
If WS.Tab.Color = 255 Then
For Each Tbl In WS.ListObjects
If Tbl.Name Like "Actual*" Then
TableName = Tbl.Name
Exit For
End If
Next Tbl
ColumnSum = Application.WorksheetFunction.Sum(Range(TableName & "[[#All],[Column" & ColumnNumber & "]]"))
ExpenseMonthSum = ExpenseMonthSum + ColumnSum
End If
Next WS
ExpenseActualSum = ExpenseMonthSum
End Function
你已经被隐含的预选赛咬伤。
当Range
未明确与特定Worksheet
对象实例合格,就变成了[_Global]
对象的隐式调用成员。
因此不合格Range
调用隐含指什么工作是当前活动,在任何工作簿恰好是积极的。
当你的意思是针对特定对象Worksheet
工作,像你的情况WS
,那么你应该有资格Range
,Rows
,Columns
,Names
和Cells
与工作表对象调用。
这就是为什么ColumnSum = Application.WorksheetFunction.Sum(WS.Range(...))
修复它。
ThisWorkbook
指其中VBA代码被写入特定工作簿时,其可以是或可以不是WS
属于工作簿。这就是为什么它没有工作。