Задача, при решении которой возникла проблема: Необходимо сформировать отчет, в котором будет подсчитано количество сотрудников по трем критериям: 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. В основном документе много других расчетов и выделений ячеек по условиям.