Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

18 Сентябрь 2019, 17:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Что необходимо изменить в коде, чтобы прекратилось миг...  (Прочитано 1742 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ForumOOo (бот)

Offline Offline

Сообщений: 700


« Стартовое сообщение: 14 Декабрь 2016, 13:43 »

Компонент: Calc
Версия продукта: 4.x
Сборка: Apache OpenOffice
ОС: Windows 10

Что необходимо изменить в коде, чтобы прекратилось мигание экрана ? Application.ScreenUpdating не помогает. В Excel всё работает нормально.
В OpenOffice, после вставки кода автонумерация, начинается мигание экрана. Знаний по написанию кода практически ноль, прошу строго не
судить.

Тестовый файл: http://forumooo.ru/attachments/upload/dokument1.ods (16.77 КБ)

--
Подпись: bsi
Записан
kompilainenn
Мастер
*****
Online Online

Сообщений: 2 718



« Ответ #1: 14 Декабрь 2016, 14:25 »

в либре ничего не мигает
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
bsi
Участник
**
Offline Offline

Сообщений: 41


« Ответ #2: 14 Декабрь 2016, 15:07 »

А в коде комментарий с автонумерации Вы сняли ? Если нет, то конечно мигать не будет. В либре тоже мигает.
Приложенный тут файл со снятым комментарием.

* Документ — копия.ods (16.76 Кб - загружено 11 раз.)
« Последнее редактирование: 14 Декабрь 2016, 15:09 от bsi » Записан
bsi
Участник
**
Offline Offline

Сообщений: 41


« Ответ #3: 14 Декабрь 2016, 15:33 »

Короче, если в код на событие листа Private Sub Worksheet_SelectionChange(ByVal Target As Range) добавляю вот это кусок, начинает мигать экран.
Код:
'Автонумерация
 Dim m&, a(), n&
   If Target.Cells.Count > 1 And Target.Column <> 2 Then Exit Sub
    a = Range("A6:B" & Cells(Rows.Count, 2).End(xlUp).Row).Value
    For m = 1 To UBound(a)
        If a(m, 2) <> "" Then n = n + 1: a(m, 1) = n Else a(m, 1) = ""
    Next
    Range("A6").Resize(UBound(a), 2) = a
Записан
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 468


« Ответ #4: 14 Декабрь 2016, 22:48 »

Полагаю, что всё же речь не о мигании экрана, а об окне программы?

Причина "моргания" листа - в том, что в момент выполнения кода
Код:
Cells(Rows.Count, 2).End(xlUp).Row
программа перемещает курсор в конец второго столбца (в либре - на строку 1048576). При этом, кстати, отрабатывает Ваш код на изменение выделения (Worksheet_SelectionChange). Можете поставить там точку останова для интереса.

Правильно ли это? Ну, в принципе, наверное, можно было бы сделать лучше, особенно с учётом огромных оптимизаций, сделанных в Либре (у AOO здесь печальнее). Но это - код VBA, который LO/AOO поддерживают условно. Так что если есть горячее желание это улучшить - милости просим внести посильный вклад.

Лучше бы переписать на родном для обеих программ StarBasic.
Записан

С уважением,
Михаил Каганский
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!