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

Вход

Регистрация

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

 

= Мир MS Excel/Циклический пересчет формул после добавления макроса - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Циклический пересчет формул после добавления макроса
Anis625 Дата: Среда, 26.05.2021, 08:26 | Сообщение № 1
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Добрый день, всем участникам форума!
Решил одну свою задачку (выполнение ряда макросов при пересчете значения формулы) готовым кодом в конкретный лист:
[vba]
Код
Private Sub Worksheet_Calculate()
'Updateby Extendoffice
    Dim Xrg As Range
    Set Xrg = Range("A8")
    If Not Intersect(Xrg, Range("A8")) Is Nothing Then
    Call Show
    Call Hide
    End If
End Sub
[/vba]
При добавлении этого кода после каждого действия файл на несколько секунд-минут зависает в пересчете формул. В начале было много ячеек с формулой СЛУЧМЕЖДУ. Думал проблема в этом. Снес. Все равно пересчитывает. Других летучих формул нет.
Пробовал отключать в начале автоматически пересчет формул Application.Calculation = ... и включать в конце кода - увы пересчитывает. Причем даже на любом листе если просто добавлю любое число в любое место - пересчитывает моргая экраном.
Убираю код. Все нормально работает. Но остается не решенная задача с запуском других макросов при изменении результата расчеты формулы. Файл нужен будет? (большой, много зачищать нужно будет, если нужно будет подготовлю).
P.S. пытался в модуль код добавить и прописал ссылку на конкретный лист перед RANGE - не работает вообще.
Буду признателен за совет как подправить код.


Сообщение отредактировал Anis625 - Среда, 26.05.2021, 08:27
 
Ответить
СообщениеДобрый день, всем участникам форума!
Решил одну свою задачку (выполнение ряда макросов при пересчете значения формулы) готовым кодом в конкретный лист:
[vba]
Код
Private Sub Worksheet_Calculate()
'Updateby Extendoffice
    Dim Xrg As Range
    Set Xrg = Range("A8")
    If Not Intersect(Xrg, Range("A8")) Is Nothing Then
    Call Show
    Call Hide
    End If
End Sub
[/vba]
При добавлении этого кода после каждого действия файл на несколько секунд-минут зависает в пересчете формул. В начале было много ячеек с формулой СЛУЧМЕЖДУ. Думал проблема в этом. Снес. Все равно пересчитывает. Других летучих формул нет.
Пробовал отключать в начале автоматически пересчет формул Application.Calculation = ... и включать в конце кода - увы пересчитывает. Причем даже на любом листе если просто добавлю любое число в любое место - пересчитывает моргая экраном.
Убираю код. Все нормально работает. Но остается не решенная задача с запуском других макросов при изменении результата расчеты формулы. Файл нужен будет? (большой, много зачищать нужно будет, если нужно будет подготовлю).
P.S. пытался в модуль код добавить и прописал ссылку на конкретный лист перед RANGE - не работает вообще.
Буду признателен за совет как подправить код.

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

Excel 2013
Похоже не в той ветке создал тему. Перенесите, пожалуйста в ветку VBA
 
Ответить
СообщениеПохоже не в той ветке создал тему. Перенесите, пожалуйста в ветку VBA

Автор - Anis625
Дата добавления - 26.05.2021 в 08:38
Anis625 Дата: Среда, 26.05.2021, 10:51 | Сообщение № 3
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
На одном сайте нашел подсказку в виде использования TextBox на изменение в ячейке но не совсем понял как вкручивать в свой код
 
Ответить
СообщениеНа одном сайте нашел подсказку в виде использования TextBox на изменение в ячейке но не совсем понял как вкручивать в свой код

Автор - Anis625
Дата добавления - 26.05.2021 в 10:51
Anis625 Дата: Среда, 26.05.2021, 11:36 | Сообщение № 4
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Решение нашел на дружественном (надеюсь) сайте:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
  If oldValue <> Cells(8, 1) Then
      Application.EnableEvents = False
      Application.ScreenUpdating = False
      Call Show
      Call Hide
      Application.EnableEvents = True
      Application.ScreenUpdating = True
   End If
End Sub
[/vba]
Странно что его сразу не высмотрел, хотя в поиске он находил этот сайт


Сообщение отредактировал Anis625 - Среда, 26.05.2021, 11:36
 
Ответить
СообщениеРешение нашел на дружественном (надеюсь) сайте:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
  If oldValue <> Cells(8, 1) Then
      Application.EnableEvents = False
      Application.ScreenUpdating = False
      Call Show
      Call Hide
      Application.EnableEvents = True
      Application.ScreenUpdating = True
   End If
End Sub
[/vba]
Странно что его сразу не высмотрел, хотя в поиске он находил этот сайт

Автор - Anis625
Дата добавления - 26.05.2021 в 11:36
Anis625 Дата: Среда, 26.05.2021, 14:08 | Сообщение № 5
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Только маленький нюанс у этого кода - когда включаю его в лист при любом действии он похоже включается (хотя значение ячейки не меняется) и задержка после каждого изменения в любом месте книги на 1-1,5с (заметно визуально). Вроде отключают обновление экрана.
Подскажите, пожалуйста, нужно для этого отдельную тему создать с вопросом?
 
Ответить
СообщениеТолько маленький нюанс у этого кода - когда включаю его в лист при любом действии он похоже включается (хотя значение ячейки не меняется) и задержка после каждого изменения в любом месте книги на 1-1,5с (заметно визуально). Вроде отключают обновление экрана.
Подскажите, пожалуйста, нужно для этого отдельную тему создать с вопросом?

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

Excel 2016
Здравствуйте

...отключают обновление экрана...
[vba]
Код
Application.ScreenUpdating = False
[/vba]
- эта строка отключает обновление экрана

нужно для этого отдельную тему создать с вопросом?
Если вопрос относится к "Циклическому пересчету формул после добавления макроса", то отдельная тема не требуется


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеЗдравствуйте

...отключают обновление экрана...
[vba]
Код
Application.ScreenUpdating = False
[/vba]
- эта строка отключает обновление экрана

нужно для этого отдельную тему создать с вопросом?
Если вопрос относится к "Циклическому пересчету формул после добавления макроса", то отдельная тема не требуется

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

Excel 2013
Serge_007,
К этому же вопросу относится, т.к. код до конца не отрабатывает как необходимо

Попробовал сделать так:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If oldValue = Cells(8, 1) Then End Sub Else
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Call Show
    Call Hide
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End If
End Sub
[/vba]
Выдает ошибку =(


Сообщение отредактировал Anis625 - Среда, 26.05.2021, 14:26
 
Ответить
СообщениеSerge_007,
К этому же вопросу относится, т.к. код до конца не отрабатывает как необходимо

Попробовал сделать так:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If oldValue = Cells(8, 1) Then End Sub Else
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Call Show
    Call Hide
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End If
End Sub
[/vba]
Выдает ошибку =(

Автор - Anis625
Дата добавления - 26.05.2021 в 14:26
Serge_007 Дата: Среда, 26.05.2021, 14:27 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
[vba]
Код
Then End Sub
[/vba]
- это что?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
[vba]
Код
Then End Sub
[/vba]
- это что?

Автор - Serge_007
Дата добавления - 26.05.2021 в 14:27
Anis625 Дата: Среда, 26.05.2021, 14:35 | Сообщение № 9
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Serge_007, :'(
Exit sub тоже не помог
 
Ответить
СообщениеSerge_007, :'(
Exit sub тоже не помог

Автор - Anis625
Дата добавления - 26.05.2021 в 14:35
Serge_007 Дата: Среда, 26.05.2021, 14:37 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Exit sub тоже не помог
Надо-то что?
Можете своими словами сформулировать что не получается сделать?


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

Автор - Serge_007
Дата добавления - 26.05.2021 в 14:37
Anis625 Дата: Среда, 26.05.2021, 14:47 | Сообщение № 11
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
Serge_007,
При добавлении кода макрос (из сообщения 4) включается (т.е. запускаются макросы Hide и Show) при действии в любом месте книги (даже просто если число какое нибудь написать). Решил подправить код, предположил что при условии
[vba]
Код
oldValue = Cells(8, 1)
[/vba]вообще ничего происходить не будет. Не получается подправить.
 
Ответить
СообщениеSerge_007,
При добавлении кода макрос (из сообщения 4) включается (т.е. запускаются макросы Hide и Show) при действии в любом месте книги (даже просто если число какое нибудь написать). Решил подправить код, предположил что при условии
[vba]
Код
oldValue = Cells(8, 1)
[/vba]вообще ничего происходить не будет. Не получается подправить.

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

Excel 2016
макрос включается при действии в любом месте книги
Естественно, макрос же в модуле листа и запускается по событию изменений на листе
[vba]
Код
Worksheet_Change
[/vba]

Сделать что надо? Что бы макрос по кнопке запускался? Или по другому событию? Или по расписанию? Или ещё как?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
макрос включается при действии в любом месте книги
Естественно, макрос же в модуле листа и запускается по событию изменений на листе
[vba]
Код
Worksheet_Change
[/vba]

Сделать что надо? Что бы макрос по кнопке запускался? Или по другому событию? Или по расписанию? Или ещё как?

Автор - Serge_007
Дата добавления - 26.05.2021 в 14:51
Anis625 Дата: Среда, 26.05.2021, 14:55 | Сообщение № 13
Группа: Заблокированные
Ранг: Ветеран
Сообщений: 674
Репутация: 31 ±
Замечаний: 20% ±

Excel 2013
запускается по событию изменений на листе

Я думал, что если указал ячейку A8 то макрос только ее смотрит.
Нужно чтобы при изменении (результата расчета формулы, любое изменение) ячейки А8 срабатывали два макроса Hide и Show. А если не меняется значение, то ничего не происходило.
 
Ответить
Сообщение
запускается по событию изменений на листе

Я думал, что если указал ячейку A8 то макрос только ее смотрит.
Нужно чтобы при изменении (результата расчета формулы, любое изменение) ячейки А8 срабатывали два макроса Hide и Show. А если не меняется значение, то ничего не происходило.

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

Excel 2016
Нужно чтобы при изменении (результата расчета формулы, любое изменение) ячейки А8 срабатывали два макроса Hide и Show
Почитайте тему - обучалку: Прошу помочь разобраться в макросе с Target и Intersect
Это как раз решение Вашей задачи


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Нужно чтобы при изменении (результата расчета формулы, любое изменение) ячейки А8 срабатывали два макроса Hide и Show
Почитайте тему - обучалку: Прошу помочь разобраться в макросе с Target и Intersect
Это как раз решение Вашей задачи

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

Excel 2013
Serge_007,
Добавил в начале
[vba]
Код
If Not Intersect(Target, Range("A:A")) Is Nothing Then
[/vba] + в конце End If и проблема решилась :D
Спасибо Вам огромное за то, что направили на обучение =)
 
Ответить
СообщениеSerge_007,
Добавил в начале
[vba]
Код
If Not Intersect(Target, Range("A:A")) Is Nothing Then
[/vba] + в конце End If и проблема решилась :D
Спасибо Вам огромное за то, что направили на обучение =)

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

Excel 2013
Финальный код (вдруг кому пригодится):
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If oldValue <> Cells(8, 1) Then
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Call Show
    Call Hide
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End If
End If
End Sub
[/vba]
 
Ответить
СообщениеФинальный код (вдруг кому пригодится):
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If oldValue <> Cells(8, 1) Then
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Call Show
    Call Hide
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End If
End If
End Sub
[/vba]

Автор - Anis625
Дата добавления - 26.05.2021 в 15:37
  • Страница 1 из 1
  • 1
Поиск:

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