2016-08-15 4 views
2

Я создал лист, содержащий некоторые значения; это календарь, который отображает некоторую информацию за каждый день года. за каждый день, у меня есть информация, указанная в качестве письма. , например. 3 февраля 2016 г. -> «М»ошибка с использованием персональной функции VBA

У меня также есть функция VBA, которая вычисляет сумму ячеек месяца, равную - скажем - «М».

Моя первая попытка состояла в том, чтобы изменить в VBA значение ячейки, получающей сумму, с функцией VBA; но моя проблема заключается в том, что пользователи могут вручную редактировать некоторые ячейки календаря, поэтому я хотел бы, чтобы ячейка суммы была пересчитана автоматически, а теперь это не так.

вот моя функция, находится в модуле с именем «а»:

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 с окнами 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! ', Однако ошибочное имя все равно было бы проблемой, потому что функция всегда возвращалась 0. – litelite

+1

вариант явный - отличный способ запустить код –