Доброго времени суток.
Использую
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. В основном документе много других расчетов и выделений ячеек по условиям.