Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Функция не пересчитывается при открытии документа
 
Доброго времени суток.
Использую Excel 2016.

Задача, при решении которой возникла проблема:
Необходимо сформировать отчет, в котором будет подсчитано количество сотрудников по трем критериям:
1. Возраст - попадание возраста сотрудника в один из шести диапазонов (1) до 30 лет, 2) от 30 до 39 лет и т.д.)
2. Специальность - одна из четырех специальностей (Врач, ММП, СМП, Прочие)
3. Образование - одно из шести вариантов (среднее полное, среднее специальное, высшее, 2 и более высших, основное общее и неполное высшее). Два последних входят по отдельности в сумму к среднему полному и среднему специальному.

Проблема заключается в том, что ячейки, в которых записан вызов макроса, реализующий выполнение поставленной задачи, не обновляют данные при открытии документа, выводят везде ноль вместо того, что должно быть.
Если в таких ячейках нажать F2, а потом Enter, то данные пересчитываются локально.
Комбинации F9 и Shift+F9 не помогают.
Параметры вычислений везде стоят в автоматическом режиме (На панели и во вкладке Параметры - Формулы).
Остальные мною написанные функции сбоя при работе не дают, но они не обрабатывают массив данных через циклы.

Макрос прописан в модуле под стандартным названием "Module1".
Текст макроса:
Код
Public Function КоличествоТекущийГод(ДиапазонНачало, ДиапазонКонец As Integer, _
                    СпециальностьНазвание As String, _
                    СпециальностьСтолбец As Range, _
                    Высшее As String, _
                    ОбразованиеСтолбец, КНСтолбец, ДНСтолбец, ВозрастСтолбец As Range) As Integer
    'Application.Volatile
    Dim ОбщаяСумма As Integer
    ОбщаяСумма = 0
    Dim i As Integer
        For i = ДиапазонНачало To ДиапазонКонец Step 1
            If cells(i, ВозрастСтолбец.Column).Value <> "" And _
            cells(i, СпециальностьСтолбец.Column).Value = СпециальностьНазвание Then
            If cells(i, ОбразованиеСтолбец.Column).Value = "+" Or (Высшее <> "" And _
            (cells(i, КНСтолбец.Column).Value = "+" Or _
                cells(i, ДНСтолбец.Column).Value = "+")) Then
                ОбщаяСумма = ОбщаяСумма + 1
            End If
        End If
    Next i
    КоличествоТекущийГод = ОбщаяСумма
End Function
Дополнительная информация:
1. Строка ниже является одной из моих попыток решить проблему. Раскомментирование ничего не дает.
Цитата
'Application.Volatile
2. Если добавить в макрос оператор Stop, то при открытии документа расчеты не останавливаются при достижении новой строки с добавленной командой. Значит макрос при открытии документа почему-то не выполняется.
3. Параметры из "Центра управления безопасностью":
Параметры ActiveX:
  • Включить все элементы управления
Параметры макросов:
  • Включить все макросы
  • Доверять доступ к объектной модели проектов VBA
Защищенный просмотр - Все CheckBox сняты
Внешнее содержимое:
  • Включить все подключения к данным
  • Включить автоматическое обновление для всех связей в книге
Параметры блокировки файлов - Не менял

Вопрос: Как сделать автоматическое обновление значений ячеек с использованием вышеуказанного макроса при изменении данных и перезапуске самого документа?

Упрощенную выдержку из рабочей таблицы прилагаю в формате xls 2003. В основном документе много других расчетов и выделений ячеек по условиям.
Изменено: maonang - 19.12.2017 02:03:05 (Убрал лишнее)
Страницы: 1
Наверх