错误使用个人VBAfunction

我创build了一个包含一些值的表单; 它是一个日历,显示一年中的每一天的一些信息。 我每天都会收到一封信。 例如2016年2月3日 – >“M”

我也有一个VBA函数来计算一个月的单元格的总和,等于 – “ – M”。

我的第一个尝试是在VBA中修改接收总和的单元格的值,用VBA函数; 但我的问题是,用户可以手动编辑一些日历单元格,所以我想总和单元格重新计算,自动,现在它不。

这里是我的function,位于名为“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! 

而不是所需的总和。

谢谢你支持我的英文不好!

你的代码有两个问题。

1) sh是未定义的,导致您的代码崩溃并导致#VALUE!

2)用于返回的名称是错误的,这意味着您的函数没有返回任何值为0的excel(0是Integer的默认值)。

为了避免将来出现这样的问题,我build议将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