Excel VBA用户定义函数,在打开另一个具有类似工作表的工作簿时返回#值
我有一个包含多个用户定义函数的工作簿,有时会出现#值错误。我已确定,当另一个具有类似工作表名称/选项卡颜色的工作簿与具有自定义项的工作簿同时打开时,这些自定义项会给出一个#值错误。自定义项引用工作簿中使用制表符颜色计算其值的其他工作表。因此,我的猜测是,这些UDF给出了一个#值错误,因为它无法区分不同打开工作簿中类似命名/颜色工作表的差异 例如,具有相同选项卡颜色的两个打开的工作簿会给这些自定义项带来一个#VAULE错误。我打开了一个带有通用工作表名称和白色选项卡颜色的新工作表来确认这一点,UDF没有给出这个错误。除此之外,这些UDF完全按照预期工作。下面是在这种情况下给出此错误的一个UDF示例。我试图通过引用“ThisWorkbook”来修复此错误,但这似乎无法纠正错误。我甚至尝试将函数移动到“ThisWorkbook”模块,但显然函数没有在该模块的excel中填充。我想不出如何解决这个问题。非常感谢你的帮助Excel VBA用户定义函数,在打开另一个具有类似工作表的工作簿时返回#值,excel,vba,user-defined-functions,worksheet,Excel,Vba,User Defined Functions,Worksheet,我有一个包含多个用户定义函数的工作簿,有时会出现#值错误。我已确定,当另一个具有类似工作表名称/选项卡颜色的工作簿与具有自定义项的工作簿同时打开时,这些自定义项会给出一个#值错误。自定义项引用工作簿中使用制表符颜色计算其值的其他工作表。因此,我的猜测是,这些UDF给出了一个#值错误,因为它无法区分不同打开工作簿中类似命名/颜色工作表的差异 例如,具有相同选项卡颜色的两个打开的工作簿会给这些自定义项带来一个#VAULE错误。我打开了一个带有通用工作表名称和白色选项卡颜色的新工作表来确认这一点,UD
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
你已经被隐式限定词咬过了 当
范围
没有使用特定的工作表
对象实例显式限定时,它将成为[\u Global]
对象上的隐式成员调用
因此,非限定的Range
调用隐式引用当前处于活动状态的任何工作表,以及恰好处于活动状态的任何工作簿
当您打算针对特定的工作表
对象工作时,如您的案例中的WS
,则应使用该工作表对象限定范围
、行
、列
、名称
和单元格
调用
这就是为什么ColumnSum=Application.WorksheetFunction.Sum(WS.Range(…))
修复了它
ThisWorkbook
指的是写入VBA代码的特定工作簿,它可能是工作簿WS
所属的,也可能不是。这就是它不起作用的原因。尝试添加…Sum(WS.Range(…
@MarcoGetrost哇,我简直不敢相信!它起作用了!非常感谢你的帮助!希望你不介意,我有一个到这篇文章的链接-Rubberduck会触发一个“隐式活动工作簿引用”检查结果在这里,警告您不合格的范围
呼叫(并使查找问题变得非常容易)。非常优雅的回答!