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

Вход

Регистрация

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

 

= Мир MS Excel/Как приостановить обновление графиков в Excel - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как приостановить обновление графиков в Excel (Макросы/Sub)
Как приостановить обновление графиков в Excel
RMMMM Дата: Пятница, 08.02.2019, 22:38 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте,

С помощью VBA создается около сотни значений, по этим значениям строится с десяток графиков. Судя по всему Excel обновляет графики при каждом изменении значения ячейки.
Если убрать графики, то код работает меньше секунды, с графиками около минуты.
[vba]
Код
Application.ScreenUpdating = False
[/vba] и [vba]
Код
Application.Calculation = xlCalculationManual
[/vba] помогают несильно.

Сам код простой:
[vba]
Код
NextDate = DateAdd("d", i, Start_Date)
ActiveSheet.Cells(rowIndex, j).Value = NextDate
[/vba]


Сообщение отредактировал RMMMM - Пятница, 08.02.2019, 22:52
 
Ответить
СообщениеЗдравствуйте,

С помощью VBA создается около сотни значений, по этим значениям строится с десяток графиков. Судя по всему Excel обновляет графики при каждом изменении значения ячейки.
Если убрать графики, то код работает меньше секунды, с графиками около минуты.
[vba]
Код
Application.ScreenUpdating = False
[/vba] и [vba]
Код
Application.Calculation = xlCalculationManual
[/vba] помогают несильно.

Сам код простой:
[vba]
Код
NextDate = DateAdd("d", i, Start_Date)
ActiveSheet.Cells(rowIndex, j).Value = NextDate
[/vba]

Автор - RMMMM
Дата добавления - 08.02.2019 в 22:38
_Boroda_ Дата: Пятница, 08.02.2019, 23:39 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14861
Репутация: 5879 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А если сначала создаваемые значения класть в массив, а потом сразу все выкладывать на лист?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА если сначала создаваемые значения класть в массив, а потом сразу все выкладывать на лист?

Автор - _Boroda_
Дата добавления - 08.02.2019 в 23:39
vikttur Дата: Пятница, 08.02.2019, 23:52 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2921
Репутация: 525 ±
Замечаний: 0% ±

На правах догадки.
Ctrl+6 - скрывает все объекты. В коде перед изменением скрыть, потом отобразить.
Вдруг поможет ускориться?
 
Ответить
СообщениеНа правах догадки.
Ctrl+6 - скрывает все объекты. В коде перед изменением скрыть, потом отобразить.
Вдруг поможет ускориться?

Автор - vikttur
Дата добавления - 08.02.2019 в 23:52
RMMMM Дата: Суббота, 09.02.2019, 01:01 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
А если сначала создаваемые значения класть в массив, а потом сразу все выкладывать на лист?

А как сразу все выкладывать? Все равно же будет [vba]
Код
ActiveSheet.Cells(rowIndex, j).Value =
[/vba] только не просто значению, а значению из массива?


Сообщение отредактировал RMMMM - Суббота, 09.02.2019, 01:02
 
Ответить
Сообщение
А если сначала создаваемые значения класть в массив, а потом сразу все выкладывать на лист?

А как сразу все выкладывать? Все равно же будет [vba]
Код
ActiveSheet.Cells(rowIndex, j).Value =
[/vba] только не просто значению, а значению из массива?

Автор - RMMMM
Дата добавления - 09.02.2019 в 01:01
RMMMM Дата: Суббота, 09.02.2019, 01:09 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 62
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
На правах догадки.
Ctrl+6 - скрывает все объекты. В коде перед изменением скрыть, потом отобразить.
Вдруг поможет ускориться?


До
[vba]
Код
Dim sObject As Shape
For Each sObject In ActiveSheet.Shapes
    If sObject.Visible = True Then
        sObject.Visible = False
    End If
Next
[/vba]

и после
[vba]
Код
For Each sObject In ActiveSheet.Shapes
    If sObject.Visible = False Then
        sObject.Visible = True
    End If
Next
[/vba]
не помогло
 
Ответить
Сообщение
На правах догадки.
Ctrl+6 - скрывает все объекты. В коде перед изменением скрыть, потом отобразить.
Вдруг поможет ускориться?


До
[vba]
Код
Dim sObject As Shape
For Each sObject In ActiveSheet.Shapes
    If sObject.Visible = True Then
        sObject.Visible = False
    End If
Next
[/vba]

и после
[vba]
Код
For Each sObject In ActiveSheet.Shapes
    If sObject.Visible = False Then
        sObject.Visible = True
    End If
Next
[/vba]
не помогло

Автор - RMMMM
Дата добавления - 09.02.2019 в 01:09
Pelena Дата: Суббота, 09.02.2019, 08:22 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 13866
Репутация: 3041 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
Все равно же будет

Нет, массив можно выкладывать на лист целиком, а не поячеечно.
Вы бы пример небольшой приложили, а то ни файла, ни кода толком нет


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщение
Все равно же будет

Нет, массив можно выкладывать на лист целиком, а не поячеечно.
Вы бы пример небольшой приложили, а то ни файла, ни кода толком нет

Автор - Pelena
Дата добавления - 09.02.2019 в 08:22
_Boroda_ Дата: Суббота, 09.02.2019, 17:59 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14861
Репутация: 5879 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А как сразу все выкладывать?

Вот так
[vba]
Код
    'формируем массив 5*3
    ReDim ar(1 To 5, 1 To 3)
    For i = 1 To 5
        For j = 1 To 3
            ar(i, j) = i + j
        Next j
    Next i
    'кладем его на лист
    Range("B4").Resize(5, 3) = ar
[/vba]
И да, с примером все было бы гораздо проще


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
А как сразу все выкладывать?

Вот так
[vba]
Код
    'формируем массив 5*3
    ReDim ar(1 To 5, 1 To 3)
    For i = 1 To 5
        For j = 1 To 3
            ar(i, j) = i + j
        Next j
    Next i
    'кладем его на лист
    Range("B4").Resize(5, 3) = ar
[/vba]
И да, с примером все было бы гораздо проще

Автор - _Boroda_
Дата добавления - 09.02.2019 в 17:59
bmv98rus Дата: Суббота, 09.02.2019, 23:14 | Сообщение № 8
Группа: Проверенные
Ранг: Старожил
Сообщений: 2023
Репутация: 320 ±
Замечаний: 20% ±

Excel 2013/2016
_Boroda_, Александр, Redim, а не Dim на всякий случай?


Замечательный медведь, процентов на 20.
 
Ответить
Сообщение_Boroda_, Александр, Redim, а не Dim на всякий случай?

Автор - bmv98rus
Дата добавления - 09.02.2019 в 23:14
_Boroda_ Дата: Воскресенье, 10.02.2019, 01:57 | Сообщение № 9
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14861
Репутация: 5879 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Да, Redim. Если раньше был массив ar, то его меняем, если не было, то и ладно


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеДа, Redim. Если раньше был массив ar, то его меняем, если не было, то и ладно

Автор - _Boroda_
Дата добавления - 10.02.2019 в 01:57
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как приостановить обновление графиков в Excel (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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