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

Вход

Регистрация

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

 

= Мир MS Excel/применить ScreenUpdate к части таблицы - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » применить ScreenUpdate к части таблицы (Макросы/Sub)
применить ScreenUpdate к части таблицы
SergeyKorotun Дата: Пятница, 08.08.2014, 22:17 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
Если макрос запустил и через некоторое время он выдал результат, то часто Application.Screenupdate= false значительно сокращает время выполнения макроса. Но в интерактивном приложении применение Application.Screenupdate= false в паре с Application.Screenupdate= true вызывает мигание некоторых элементов экрана (в приложенном файле мигают номера строк и наименования столбцов), что раздражает. Можно применить Application.Screenupdate только к части экрана (только к диапазону A2:K11)?
Стрелки влево и в право - используется Application.Screenupdate, а стрелки вверх и вниз - Application.Screenupdate не используется.
К сообщению приложен файл: onkey.xlsm (17.5 Kb)
 
Ответить
СообщениеЕсли макрос запустил и через некоторое время он выдал результат, то часто Application.Screenupdate= false значительно сокращает время выполнения макроса. Но в интерактивном приложении применение Application.Screenupdate= false в паре с Application.Screenupdate= true вызывает мигание некоторых элементов экрана (в приложенном файле мигают номера строк и наименования столбцов), что раздражает. Можно применить Application.Screenupdate только к части экрана (только к диапазону A2:K11)?
Стрелки влево и в право - используется Application.Screenupdate, а стрелки вверх и вниз - Application.Screenupdate не используется.

Автор - SergeyKorotun
Дата добавления - 08.08.2014 в 22:17
nilem Дата: Пятница, 08.08.2014, 22:35 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
а если так:
[vba]
Код
Private Sub screenupdating_no()
For i = 1 To 10
     For j = 1 To 10
         a(i, j) = Int(10 * Rnd())
         If a(i, j) Mod 2 <> 0 Then a(i, j) = ""
     Next j
Next i
Range("B2:K11").Value = a
End Sub
[/vba]
только нужно будет Dim a(1 To 10, 1 To 10) as variant

и еще желательно добавить
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnKey "{UP}"
Application.OnKey "{DOWN}"
Application.OnKey "{LEFT}"
Application.OnKey "{RIGHT}"
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеа если так:
[vba]
Код
Private Sub screenupdating_no()
For i = 1 To 10
     For j = 1 To 10
         a(i, j) = Int(10 * Rnd())
         If a(i, j) Mod 2 <> 0 Then a(i, j) = ""
     Next j
Next i
Range("B2:K11").Value = a
End Sub
[/vba]
только нужно будет Dim a(1 To 10, 1 To 10) as variant

и еще желательно добавить
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnKey "{UP}"
Application.OnKey "{DOWN}"
Application.OnKey "{LEFT}"
Application.OnKey "{RIGHT}"
End Sub
[/vba]

Автор - nilem
Дата добавления - 08.08.2014 в 22:35
SergeyKorotun Дата: Пятница, 08.08.2014, 22:47 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
Так не подходит, т.к. на самом деле выводятся не сами значения массива. В данном примере нечетные значения не выводится. Конечно можно создать еще один массив, присвоить его элементам то что должно отображаться на экране. Но я то еще не забыл первые компьютеры, в память которых и сама программа на бейсике не помещалась, а здесь надо дублировать массив.
и еще желательно добавить
А разве при закрытии книги это не произойдет автоматически?


Сообщение отредактировал SergeyKorotun - Пятница, 08.08.2014, 22:48
 
Ответить
СообщениеТак не подходит, т.к. на самом деле выводятся не сами значения массива. В данном примере нечетные значения не выводится. Конечно можно создать еще один массив, присвоить его элементам то что должно отображаться на экране. Но я то еще не забыл первые компьютеры, в память которых и сама программа на бейсике не помещалась, а здесь надо дублировать массив.
и еще желательно добавить
А разве при закрытии книги это не произойдет автоматически?

Автор - SergeyKorotun
Дата добавления - 08.08.2014 в 22:47
nilem Дата: Пятница, 08.08.2014, 23:02 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
не совсем понятно
т.к. на самом деле выводятся не сами значения массива

а вот это в вашем коде что?: Cells(i + 1, j + 1) = a(i, j)
просто заполнять 100 ячеек по одной - это 100 миганий экрана, а перенести массив в 100 ячеек - как бы одно мигание
Цитата
А разве при закрытии книги это не произойдет автоматически?

вместе с вашим файлом откройте еще какую-нибудь книгу. Закройте ваш файл, проверьте функциональность стрелок в оставшейся книге.


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениене совсем понятно
т.к. на самом деле выводятся не сами значения массива

а вот это в вашем коде что?: Cells(i + 1, j + 1) = a(i, j)
просто заполнять 100 ячеек по одной - это 100 миганий экрана, а перенести массив в 100 ячеек - как бы одно мигание
Цитата
А разве при закрытии книги это не произойдет автоматически?

вместе с вашим файлом откройте еще какую-нибудь книгу. Закройте ваш файл, проверьте функциональность стрелок в оставшейся книге.

Автор - nilem
Дата добавления - 08.08.2014 в 23:02
SergeyKorotun Дата: Пятница, 08.08.2014, 23:21 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
е совсем понятно
Цитата SergeyKorotun, 08.08.2014 в 22:47, в сообщении № 3
т.к. на самом деле выводятся не сами значения массива
а вот это в вашем коде что?: Cells(i + 1, j + 1) = a(i, j)

Cells(i + 1, j + 1) = a(i, j) вырвали из контекста. Оно же находится внутри if - then - else - endif и поэтому выводятся не все значения массива а, а примерно половина. А вместо второй половины выводятся пустые значение.
вместе с вашим файлом откройте еще какую-нибудь книгу. Закройте ваш файл, проверьте функциональность стрелок в оставшейся книге
Тогда правильнее будет и назначение процедур клавишам, и отмену поместить не в "Эта книга", а в "Лист1"?
Тогда имя процедур будет WorkSheet_Open и WorkSheet_BeforeClose?


Сообщение отредактировал SergeyKorotun - Пятница, 08.08.2014, 23:26
 
Ответить
Сообщение
е совсем понятно
Цитата SergeyKorotun, 08.08.2014 в 22:47, в сообщении № 3
т.к. на самом деле выводятся не сами значения массива
а вот это в вашем коде что?: Cells(i + 1, j + 1) = a(i, j)

Cells(i + 1, j + 1) = a(i, j) вырвали из контекста. Оно же находится внутри if - then - else - endif и поэтому выводятся не все значения массива а, а примерно половина. А вместо второй половины выводятся пустые значение.
вместе с вашим файлом откройте еще какую-нибудь книгу. Закройте ваш файл, проверьте функциональность стрелок в оставшейся книге
Тогда правильнее будет и назначение процедур клавишам, и отмену поместить не в "Эта книга", а в "Лист1"?
Тогда имя процедур будет WorkSheet_Open и WorkSheet_BeforeClose?

Автор - SergeyKorotun
Дата добавления - 08.08.2014 в 23:21
Мир MS Excel » Вопросы и решения » Вопросы по VBA » применить ScreenUpdate к части таблицы (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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