Vba Excel UDF正在返回#值!更改工作表以及复制和粘贴时

Vba Excel UDF正在返回#值!更改工作表以及复制和粘贴时,vba,excel,user-defined-functions,Vba,Excel,User Defined Functions,我有一张表,上面有一个表,下面的函数将用于搜索另一张表,并返回代理名称出现的次数 我遇到的问题是,如果我尝试复制并粘贴该值,它将从一个数字变为“#value!”。此外,当切换工作表,然后切换回调用UDF的工作表时,它会将所有值更改为“#Value!” 下面是函数及其调用方式。任何帮助都将不胜感激。 公共函数GetMatrixCount(代理名称为字符串)为整数 Dim matrixSheet作为工作表,McContainer()作为字符串,c作为整数,m作为整数,y作为整数 Dim fullR

我有一张表,上面有一个表,下面的函数将用于搜索另一张表,并返回代理名称出现的次数

我遇到的问题是,如果我尝试复制并粘贴该值,它将从一个数字变为“#value!”。此外,当切换工作表,然后切换回调用UDF的工作表时,它会将所有值更改为“#Value!”

下面是函数及其调用方式。任何帮助都将不胜感激。

公共函数GetMatrixCount(代理名称为字符串)为整数
Dim matrixSheet作为工作表,McContainer()作为字符串,c作为整数,m作为整数,y作为整数
Dim fullRange作为范围,l作为范围,lastRow作为整数
前三个变暗为字符串,curAgent为字符串
“待办事项
'如果矩阵更新工作表不存在或输入字符串为空,则返回零
出错时继续下一步
设置矩阵表=工作表(“矩阵更新”)
错误转到0
如果matrixSheet为Nothing或Not Trim(代理名称)”,则
GetMatrixCount=0
退出功能
如果结束
'获取用户希望从页面顶部的标题输入的月数-用于对矩阵更新数据进行值检查
mContainer()=拆分(范围(“B1”).值“”)
m=月(日期值(mContainer(UBound(mContainer)-1)和“1”))
y=mContainer(UBound(mContainer))
前三个=左(代理名称,3)
lastRow=matrixSheet.Cells(Rows.Count,1).End(xlUp).Row
c=0
Set fullRange=matrixSheet.Range(“B2:B”和lastRow)
对于全范围内的每个l。单元格
curAgent=l.偏移量(0,1).值
如果月(l.Value)=m,年(l.Value)=y,左(curAgent,3)=前三个月和中(curAgent,InStrRev(curAgent,“”)+1)=中(AgentName,InStrRev(AgentName,“”)+1),则
c=c+1
如果结束
如果l.Value=”“,则
退出
如果结束
下一个
GetMatrixCount=c
端函数
用法: =GetMatrixCount(B4)

B4:John DoeUPD: 尝试写以下内容:

Set wb = ThisWorkbook
Set matrixSheet = wb.Sheets("Matrix Updates")

当您切换工作簿时,它应该可以解决问题。

这是为了获取月份名称;单元格B2包含一个字符串,如:“统计表-2012年12月”;因此,我将字符串拆分为mContainer变量,得到倒数第二个工作(12月),并将其添加到月份,以便与数据字段中的月份进行比较;希望能回答你的问题是的,这似乎解决了“价值”这个问题!更改工作簿时。我仍在获得价值!复制和粘贴值时。但这本身就是一个很大的帮助。你试过调试这个函数,看看在什么地方出错了吗?我想我不知道你说的调试是什么意思。我尝试在函数中添加几个debug.print项,但当#值为#时,我没有发现任何错误/问题!发生。我会再加上一些,检查一下阿加尼的答案。粘贴值时,将重新计算该值。
mContainer()=Split(Range(“B1”).Value“”
上的引用是相对引用,当我将数据复制到另一个工作表时,它试图转到工作表B1而不是源工作表。我添加了对源代码表的引用,现在一切都好了<代码>mContainer()=拆分(表格(“记分卡”).范围(“B1”).值“”)
Set wb = ThisWorkbook
Set matrixSheet = wb.Sheets("Matrix Updates")