Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Ручной пересчет формул одного листа - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Ручной пересчет формул одного листа (Макросы/Sub)
Ручной пересчет формул одного листа
Anis625 Дата: Понедельник, 11.07.2022, 14:25 | Сообщение № 1
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Добрый день, всем участникам форума.
Прошу Вас, по возможности, помочь, подсказать или послать где можно решение одного вопроса.
Работаю с одним большим файлом (не получится приложить, даже не представляю как его можно вычистить чтобы сохранить структуру и соблюсти конфиденциальность, надеюсь получится подсказать без файла). Большой в плане количества столбцов и листов (юзеров не получилось убедить сократить кол-во столбцов).
Один из листов который уже заполнен до столбца JY (+ нужно добавить еще 100 столбцов) зависает на заметное глазу время при просто внесении любого значения в ячейку.
Нашел код который позволят вносить в этом листе информацию без торможения, но для этого я отключаю от авто пересчета всю книгу:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
       
    Dim KeyCells As Range

    Set KeyCells = ThisWorkbook.Sheets("Себ С и БЕЗ ВГО (ф 1.2.)").Range("A1:JY285")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then
        
        ThisWorkbook.Sheets("Себ С и БЕЗ ВГО (ф 1.2.)").Calculate

End If
End Sub
[/vba]
Можно ли каким-либо способом включить ручной режим пересчета только для отдельного листа?
Разные способы которые нашел в интернете пробовал:
1. [vba]
Код
Sheets("Себ С и БЕЗ ВГО (ф 1.2.)").EnableCalculation = 0
[/vba]
2. сорри за ссылку, копировать много этот способо тоже пробовал
3. Этот способо не разобрался как вкрутить к себе
И еще пара других способов пробовал - не сохранились.
Буду признателен за любую подсказку как можно решить задачку.
Как вариант может можно включать ручной пересчет при переходе на этот лист, а при выходе с этого листа в любой другой включать автоматический пересчет.


Сообщение отредактировал Anis625 - Понедельник, 11.07.2022, 14:26
 
Ответить
СообщениеДобрый день, всем участникам форума.
Прошу Вас, по возможности, помочь, подсказать или послать где можно решение одного вопроса.
Работаю с одним большим файлом (не получится приложить, даже не представляю как его можно вычистить чтобы сохранить структуру и соблюсти конфиденциальность, надеюсь получится подсказать без файла). Большой в плане количества столбцов и листов (юзеров не получилось убедить сократить кол-во столбцов).
Один из листов который уже заполнен до столбца JY (+ нужно добавить еще 100 столбцов) зависает на заметное глазу время при просто внесении любого значения в ячейку.
Нашел код который позволят вносить в этом листе информацию без торможения, но для этого я отключаю от авто пересчета всю книгу:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
       
    Dim KeyCells As Range

    Set KeyCells = ThisWorkbook.Sheets("Себ С и БЕЗ ВГО (ф 1.2.)").Range("A1:JY285")

If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then
        
        ThisWorkbook.Sheets("Себ С и БЕЗ ВГО (ф 1.2.)").Calculate

End If
End Sub
[/vba]
Можно ли каким-либо способом включить ручной режим пересчета только для отдельного листа?
Разные способы которые нашел в интернете пробовал:
1. [vba]
Код
Sheets("Себ С и БЕЗ ВГО (ф 1.2.)").EnableCalculation = 0
[/vba]
2. сорри за ссылку, копировать много этот способо тоже пробовал
3. Этот способо не разобрался как вкрутить к себе
И еще пара других способов пробовал - не сохранились.
Буду признателен за любую подсказку как можно решить задачку.
Как вариант может можно включать ручной пересчет при переходе на этот лист, а при выходе с этого листа в любой другой включать автоматический пересчет.

Автор - Anis625
Дата добавления - 11.07.2022 в 14:25
Anis625 Дата: Понедельник, 11.07.2022, 14:40 | Сообщение № 2
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Обратил внимание что выше код работает если всю книгу включить в ручной пересчет.
С этим кодом можно отключать/включать автопересчет формул при активации листа, но не отключает всю книгу от автопересчета
[vba]
Код
Private Sub Worksheet_Activate()
    Application.Calculation = xlCalculationManual
End Sub

Private Sub Worksheet_Deactivate()
    Application.Calculation = xlCalculationAutomatic
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.Calculation = xlCalculationAutomatic
End Sub
[/vba]
Но он работает в модуле листа.
 
Ответить
СообщениеОбратил внимание что выше код работает если всю книгу включить в ручной пересчет.
С этим кодом можно отключать/включать автопересчет формул при активации листа, но не отключает всю книгу от автопересчета
[vba]
Код
Private Sub Worksheet_Activate()
    Application.Calculation = xlCalculationManual
End Sub

Private Sub Worksheet_Deactivate()
    Application.Calculation = xlCalculationAutomatic
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.Calculation = xlCalculationAutomatic
End Sub
[/vba]
Но он работает в модуле листа.

Автор - Anis625
Дата добавления - 11.07.2022 в 14:40
Anis625 Дата: Понедельник, 11.07.2022, 15:16 | Сообщение № 3
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Получилось реализовать так:
В модуле[vba]
Код
Sub FxlAutomatic()
    Application.Calculation = xlAutomatic
End Sub
Sub xlManual()
    Application.Calculation = FxlManual
End Sub
[/vba]
+ в модуле листа[vba]
Код
Private Sub Worksheet_Activate()
    Call FxlManual
End Sub
--------------------------------------
Private Sub Worksheet_Deactivate()
    Call FxlAutomatic
End Sub
-------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)    
    Dim KeyCells As Range
    Set KeyCells = ThisWorkbook.Sheets("Себ С и БЕЗ ВГО (ф 1.2.)").Range("A1:JY285")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then       
        ThisWorkbook.Sheets("Себ С и БЕЗ ВГО (ф 1.2.)").Calculate
End If
End Sub
[/vba]


Сообщение отредактировал Anis625 - Понедельник, 11.07.2022, 15:22
 
Ответить
СообщениеПолучилось реализовать так:
В модуле[vba]
Код
Sub FxlAutomatic()
    Application.Calculation = xlAutomatic
End Sub
Sub xlManual()
    Application.Calculation = FxlManual
End Sub
[/vba]
+ в модуле листа[vba]
Код
Private Sub Worksheet_Activate()
    Call FxlManual
End Sub
--------------------------------------
Private Sub Worksheet_Deactivate()
    Call FxlAutomatic
End Sub
-------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)    
    Dim KeyCells As Range
    Set KeyCells = ThisWorkbook.Sheets("Себ С и БЕЗ ВГО (ф 1.2.)").Range("A1:JY285")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then       
        ThisWorkbook.Sheets("Себ С и БЕЗ ВГО (ф 1.2.)").Calculate
End If
End Sub
[/vba]

Автор - Anis625
Дата добавления - 11.07.2022 в 15:16
Anis625 Дата: Понедельник, 11.07.2022, 15:30 | Сообщение № 4
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Сократил, сразу зашиваем в модуль листа:[vba]
Код
Private Sub Worksheet_Activate()
    Application.Calculation = xlManual
End Sub

Private Sub Worksheet_Deactivate()
        Application.Calculation = xlAutomatic
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = ThisWorkbook.Sheets("наименование листа").Range("A1:JY285")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
        Is Nothing Then
        ThisWorkbook.Sheets("наименование листа").Calculate
End If
End Sub
[/vba]


Сообщение отредактировал Anis625 - Понедельник, 11.07.2022, 15:31
 
Ответить
СообщениеСократил, сразу зашиваем в модуль листа:[vba]
Код
Private Sub Worksheet_Activate()
    Application.Calculation = xlManual
End Sub

Private Sub Worksheet_Deactivate()
        Application.Calculation = xlAutomatic
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Set KeyCells = ThisWorkbook.Sheets("наименование листа").Range("A1:JY285")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
        Is Nothing Then
        ThisWorkbook.Sheets("наименование листа").Calculate
End If
End Sub
[/vba]

Автор - Anis625
Дата добавления - 11.07.2022 в 15:30
Serge_007 Дата: Понедельник, 11.07.2022, 15:42 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Можно ли каким-либо способом включить ручной режим пересчета только для отдельного листа?
Нет, нельзя

Получилось реализовать так
Это не то же самое)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Можно ли каким-либо способом включить ручной режим пересчета только для отдельного листа?
Нет, нельзя

Получилось реализовать так
Это не то же самое)

Автор - Serge_007
Дата добавления - 11.07.2022 в 15:42
Anis625 Дата: Понедельник, 11.07.2022, 16:12 | Сообщение № 6
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Serge_007,
согласен, но получилось обойти только таким способом. Обычно у меня не самый изящный способ решения получается
 
Ответить
СообщениеSerge_007,
согласен, но получилось обойти только таким способом. Обычно у меня не самый изящный способ решения получается

Автор - Anis625
Дата добавления - 11.07.2022 в 16:12
Serge_007 Дата: Понедельник, 11.07.2022, 16:20 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
получилось обойти только таким способом
Вряд ли можно какой-то ещё способ придумать :)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
получилось обойти только таким способом
Вряд ли можно какой-то ещё способ придумать :)

Автор - Serge_007
Дата добавления - 11.07.2022 в 16:20
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Ручной пересчет формул одного листа (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!