使用个人 VBA 函数时出错
Posted
技术标签:
【中文标题】使用个人 VBA 函数时出错【英文标题】:error using a personal VBA function 【发布时间】:2016-08-15 15:17:46 【问题描述】:我创建了一个包含一些值的工作表;它是一个日历,显示一年中每一天的一些信息。 对于每一天,我都会收到一封以信函形式提供的信息。 例如2016 年 2 月 3 日 --> “M”
我还有一个 VBA 函数,它计算一个月的单元格总和等于 - 比如说 - “M”。
我的第一次尝试是在 VBA 中使用 VBA 函数修改接收和的单元格的值;但我的问题是用户可以手动编辑日历的某些单元格,所以我希望自动重新计算总和单元格,但现在没有。
这是我的函数,位于名为“abc”的模块中:
Function nombreCellulesDansEtat2() As Integer
Application.Volatile
Dim moisSub
Dim équipeSub
Dim étatSub
moisSub = 1
équipeSub = 1
étatSub = "M"
Dim ligneDépart As Integer
ligneDépart = 5 + (moisSub - 1) * 9
Dim ligneEnCours As Integer
ligneEnCours = ligneDépart + équipeSub
Dim cellule
Dim retour As Integer
For Each cellule In sh.Range("B" & ligneEnCours & ":AF" & ligneEnCours)
retour = retour + IIf(cellule.Value = étatSub, 1, 0)
Next cellule
nombreCellulesDansEtat = retour
End Function
请不要关注团队编号(法语为“équipeSub”),它与问题无关。
包含总和的单元格有这个公式:
=nombreCellulesDansEtat2()
并启用了自动计算公式的选项(我在windows 10上使用excel 365)
错误是总和单元格包含:
#VALUE!
而不是所需的总和。
感谢您支持我糟糕的英语!
【问题讨论】:
当它给您错误时,您是否尝试过使用调试器单步执行它? 另外,您应该考虑更改帖子的名称。因为那个错误意味着excel确实尝试重新计算,但是出现了错误。 用 sh 代替 ActiveSheet 函数计算为整数 【参考方案1】:你的代码有两个问题。
1) sh
未定义,这会导致您的代码崩溃并导致#VALUE!
。
2) 您用于返回的名称是错误的,这意味着您的函数没有返回任何结果,对于 excel,其计算结果为 0(0 是 Integer
的默认值)。
为避免以后出现此类问题,我建议在每个文件的开头添加Option Explicit
。该指令将导致 excel 报告此类错误。
Function nombreCellulesDansEtat2() As Integer
Application.Volatile
Dim moisSub
Dim équipeSub
Dim étatSub
moisSub = 1
équipeSub = 1
étatSub = "M"
Dim ligneDépart As Integer
ligneDépart = 5 + (moisSub - 1) * 9
Dim ligneEnCours As Integer
ligneEnCours = ligneDépart + équipeSub
Dim cellule
Dim retour As Integer
'sh is undefined. which means .Range() is called on Nothing
For Each cellule In sh.Range("B" & ligneEnCours & ":AF" & ligneEnCours)
retour = retour + IIf(cellule.Value = étatSub, 1, 0)
Next cellule
'was nombreCellulesDansEtat
nombreCellulesDansEtat2 = retour
End Function
【讨论】:
谢谢,而且我在我的函数中使用了“sh”,因为我将此函数复制到一个新模块中,所以它不再存在了。 @lolveley 未定义的sh
是导致#VALUE!
的实际原因,但是输入错误的名称仍然是个问题,因为函数总是返回 0。以上是关于使用个人 VBA 函数时出错的主要内容,如果未能解决你的问题,请参考以下文章
个人永久性免费-Excel催化剂功能第47波-VBA开发者喜爱的加密函数类