Страницы: 1 2 След.
RSS
Как прописать пересчет формул в макросе?
 
Доброго всем времени суток.
Прошу помощи в решение проблемки.
Есть макрос, он подставляет значение и выводит на печать определенные листы, выполняет это в цикличности.
Т.е. вставил значение - отправил на печать, следущее вставил - отправил на печать.
Но файл большой и он не успевает обновить все формулы (пересчитать)
Как прописать в макросе после подстановки значения пересчет формул?
Макрос прилагаю
Код
Sub АОСР()

    Dim c As Range, el
    Application.ScreenUpdating = False
    With Sheets("ФормаСети")
        For Each c In .Range(.Range("F57"), .[F57].End(xlDown)).Cells
            Sheets("ФОРМА").Range("DF123") = c.Value
            Sheets(Array("1ГидИз1", "2Гео", "3ГидИз2", "3ГидИз2", "4Тран", "5РазрТрКол", "6ПеОснКол", "7ПеОснКан", "8МонтТруб", "9БетЗам", "10ОбЗасПеТр", "11БетЛот", "12ШтукКол", "13МонтКол", "14ОбрЗасПеКол", "15МонГол", "16ОбрЗасГрТр", "17ОбрЗасГрКол")).Select
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                ThisWorkbook.Path & Application.PathSeparator & c.Value & ".pdf", Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
        Next
    End With
    Application.ScreenUpdating = True
End Sub
 
Если стоит автомат. пересчёт, то перед печатью добавьте строку:
Код
doevents

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Извините я полный профан в макросах, это перед какой строчкой?
 
Попробуйте между 7 и 8 строками.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
не, не пересчитывает ((
 
Может Calculate?
 
Если формулы только на листе "ФОРМА":
Скрытый текст

Если формулы на листе "ФОРМА" и на тех листах, которые Вы выделяете:
Скрытый текст

P.S. Я из цикла убрал выделение листов, чтобы каждый раз листы не выделялись, т.к. достаточно выделить один раз.
Коды не тестировал, поэтому возможны опечатки или ошибки.
 
спасибо, сейчас попробую
не не изменяет, не пересчитывает (((
Изменено: Иван Фильченков - 23.07.2016 11:33:58
 
Пересчет на всех листах активной книги и на всех листах всех других открытых книг:
Код
Sub АОСР()
    Dim c As Range, el
    Application.ScreenUpdating = False
    Sheets(Array("1ГидИз1", "2Гео", "3ГидИз2", "3ГидИз2", "4Тран", "5РазрТрКол", "6ПеОснКол", "7ПеОснКан", "8МонтТруб", "9БетЗам", "10ОбЗасПеТр", "11БетЛот", "12ШтукКол", "13МонтКол", "14ОбрЗасПеКол", "15МонГол", "16ОбрЗасГрТр", "17ОбрЗасГрКол")).Select
    With Sheets("ФормаСети")
        For Each c In .Range(.Range("F57"), .[F57].End(xlDown)).Cells
            Sheets("ФОРМА").Range("DF123") = c.Value
            Application.Calculate
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                ThisWorkbook.Path & Application.PathSeparator & c.Value & ".pdf", Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
        Next
    End With
    Application.ScreenUpdating = True
End Sub
 
Попробуйте после пересчёта добавить рекомендуемую мной ранее команду.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
не пересчитывает, пересчитывает только после первой подстановке (((
 
Иван Фильченков, сделайте файл-пример и приложите к теме, чтобы не гадать больше. И озвучьте что у Вас за офис (год, разрядность) и ОС.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Может быть убрать ScreenUpdating. В этом коде нет обновления формул (то есть это Ваш первоначальный код, только я вынес из цикла выделение листов):
Код
Sub АОСР()
    Dim c As Range, el
    Sheets(Array("1ГидИз1", "2Гео", "3ГидИз2", "3ГидИз2", "4Тран", "5РазрТрКол", "6ПеОснКол", "7ПеОснКан", "8МонтТруб", "9БетЗам", "10ОбЗасПеТр", "11БетЛот", "12ШтукКол", "13МонтКол", "14ОбрЗасПеКол", "15МонГол", "16ОбрЗасГрТр", "17ОбрЗасГрКол")).Select
    With Sheets("ФормаСети")
        For Each c In .Range(.Range("F57"), .[F57].End(xlDown)).Cells
            Sheets("ФОРМА").Range("DF123") = c.Value
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                ThisWorkbook.Path & Application.PathSeparator & c.Value & ".pdf", Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
        Next
    End With
End Sub
Изменено: Karataev - 23.07.2016 12:13:02
 
Иван Фильченков, Calculate пробовали?
 
Юрий М, да я предлагал Calculate в постах 7 и 9.
 
Цитата
Иван Фильченков написал:
пересчитывает только после первой подстановке (((
а в каком коде пересчитывает? В Вашем исходном или в том, который я предложил? Или при использовании DoEvents?
 
Цитата
Karataev написал:
Юрий М, да я предлагал Calculate в постах 7 и 9
Я вижу, но мой вопрос автору темы )
 
Раньше был мой исходный код и он пересчитывался. Сейчас файл большой 20 метров и много связей как и листов и он перестал все пересчитывать.
Офис 13
 
Да делал, пересчета после подстановки нет (
 
Иван Фильченков, а код из поста 13 пробовали? Только у Вас должен быть включен автоматический пересчет формул: вкладка "Формулы" - Параметры вычислений - Автоматически.
 
Цитата
Karataev написал: у Вас должен быть включен автоматический пересчет формул
Думаю, что автор проверил это первым делом.
 
Я конечно чайник, но действительно сразу проверил
 
Иван Фильченков, ну так что, Вы тестировали код из поста 13?
 
Попробовал, результат тот же, не пересчитывает ((
 
Может быть какие-нибудь косвенные действия делать, чтобы обновились формулы. Попробуйте такой способ:
Скрытый текст
 
Попробовал, не обновляет.
Странно то что мой исходный файл раньше работал и все обновлялось. Что же может быть такое?? ((
 
А так? Макрос сохраняет файл после каждого изменения ячейки "DF123":
Скрытый текст
 
Извини за дурацкий вопрос, я в макросах совсем ни как, но он где должен быть записан, сейчас он у меня торчит в Module4. Это может как то сказаться на его работоспособности?
Последний тоже код не обновляет ((
Изменено: Иван Фильченков - 23.07.2016 15:20:04
 
Вставьте его туда, где у Вас был Ваш код.
 
А вручную, когда Вы изменяете ячейку "DF123", формулы обновляются сейчас?
Страницы: 1 2 След.
Читают тему
Наверх