使用个人 VBA 函数时出错
error using a personal VBA function
我创建了一个包含一些值的 sheet;它是一个日历,显示一年中每一天的一些信息。
每一天,我都会收到一封信中给出的信息。
例如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()
并启用自动计算公式的选项(我使用 excel 365 和 windows 10)
错误是求和单元格包含:
#VALUE!
而不是要求的金额。
谢谢你支持我的烂英文!
你的代码有两个问题。
1) sh
未定义,这会导致您的代码崩溃并导致 #VALUE!
.
2) 您用于 return 的名称是错误的,这意味着您的函数 returning 没有任何东西 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
我创建了一个包含一些值的 sheet;它是一个日历,显示一年中每一天的一些信息。 每一天,我都会收到一封信中给出的信息。 例如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()
并启用自动计算公式的选项(我使用 excel 365 和 windows 10)
错误是求和单元格包含:
#VALUE!
而不是要求的金额。
谢谢你支持我的烂英文!
你的代码有两个问题。
1) sh
未定义,这会导致您的代码崩溃并导致 #VALUE!
.
2) 您用于 return 的名称是错误的,这意味着您的函数 returning 没有任何东西 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