2016-08-15 62 views
2

我创建了一个包含一些值的工作表;它是显示一年中每一天的一些信息的日历。我每天都会收到一封作为信件给出的信息。 例如2016年2月3日 - >“M”使用个人VBA功能的错误

我也有一个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() 

和公式的自动计算的选项被启用(I使用Excel 365具有窗10)

的错误是总和单元包含:

#VALUE! 

而不是所需的总和。

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

+2

您是否尝试过使用调试器逐句通过它,当它给出错误时? – litelite

+0

另外,您应该考虑更改帖子的名称。因为那个错误意味着excel试图重新计算,但是出现错误。 – litelite

+1

用sh代替ActiveSheet函数的计算结果为整数 –

回答

4

您的代码存在两个问题。

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

2)您用于返回的名称是错误的,这意味着您的函数没有返回任何值为0的excel(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 
+0

谢谢,而且我在我的函数中使用了“sh”,当我将这个函数复制到一个新模块中时,就不再存在了。 – lolveley

+0

@lolveley未定义'sh'是'#VALUE的真正原因!'但是misstyped名字仍然一直因为函数会始终返回0。 – litelite

+1

选项明确的一个问题是启动代码的好方法 –