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

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

22 Май 2019, 08:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3 4 »   Вниз
  Печать  
Автор Тема: Отключение обновления экрана  (Прочитано 17755 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sofi
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Ответ #15: 14 Сентябрь 2014, 21:18 »

Set c = c(2)
Означает сдвиг на одну ячейку вниз в том же столбце,
относительно заданной ранее в переменной - "с".

Можно написать иначе:
Set c = c.Offset(1, 0)
Записан

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754


Woe from wit


« Ответ #16: 14 Сентябрь 2014, 21:45 »

Ничего не дергается, особенно, если очистку поставить после отключения обновления экрана:
Код:
Application.ScreenUpdating = False ' отключаем обновление экрана
Range(Cells(7, 1), Cells(Rows.Count, 8)).Clear ' очистка


Можно написать иначе:
Set c = c.Offset(1, 0)
Нужно.
« Последнее редактирование: 14 Сентябрь 2014, 22:28 от Hasim » Записан
sofi
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Ответ #17: 15 Сентябрь 2014, 13:35 »

Цитата:
Нужно.
А почему нужно?
Для улучшения читабельности кода?

Так, все-таки, уважаемые спецы, как теоритически,
в "кальке", реализуется "борьба с дерганием" или отключение обновления экрана, на
примере приведенного мною файла?
Или это невозможно в принципе?  
Мне, на будущее, интересно!

* Пример OOCalc.ods (22.47 Кб - загружено 11 раз.)
« Последнее редактирование: 15 Сентябрь 2014, 13:50 от sofi » Записан

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #18: 15 Сентябрь 2014, 13:54 »

В принципе - возможно. И даже реализуемо. Достаточно использовать многократно описанный метод доступа к данным листа.
Суть метода заключается в том, что время обращения к отдельной ячейке листа почти такое же, как обращение к данным целого диапазона ячеек.
Поэтому принято все необходимые вычисления проводить в памяти, формировать результат в виде структуры "массив массивов" и одним оператором setDataArray вписывать в нужное место листа. Лист при этом тоже мигнёт, но сделает это один раз и почти незаметно.
В данном конкретном случае достаточно расшифровать смысл строк
Код:
c.Offset(, 2).FormulaR1C1 = "=ROUND(RC[1]/day(date(year(RC[-2]);month(RC[-2])+1;1)-1);2)"
c.Offset(, 2).Value = c.Offset(, 2).Value
в виде
"Разделить значение из ячеек колонки D на количество дней в месяце и вставить результат в ячейку C" (кстати, формула стала бы намного короче с функцией DAYSINMONTH)
После такой расшифровки задача становится простой и понятной, код на бэйсике пишется и отлаживается в течении 10-15 минут... и экран перестаёт мигать
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
sofi
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Ответ #19: 15 Сентябрь 2014, 14:10 »

Спасибо за "наколку" с
Цитата:
DAYSINMONTH
, просто этой функции нет в Excel.
Будем знать и применять!

Что касается, обработки в массиве.
Все верно, давно хотел все "запихнуть в массив" для обработки, но необходимости не было.
Работала себе и работало. Но это в Excel!

А в "кальке" это неподъемная задача, для меня,
я скорее "лопну и всех забрызгаю"! Непонимающий
Записан

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 711


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #20: 15 Сентябрь 2014, 14:36 »

Нужно
Обязательно нужно! Это нужно не вам, а всем. Когда макрос доходит до этой переменной, он ищет её по всем модулям, у вас он её где-то находит, а у нас её нигде нет, поэтому пишет "переменная не определена"
Так, все-таки, уважаемые спецы, как теоритически,
в "кальке", реализуется "борьба с дерганием" или отключение обновления экрана, на примере приведенного мною файла?
"Борьба с дерганием" в данном случае(вы не поверите) заключается не в отключении экрана, а в полном переписывании макросов. Мне кажется, что эти макросы писали диверсанты Шокирован Например макрос "Function CountDaysMonth(date_start As Date, date_end As Date, month_val As Date)" пробегает количество циклов равное количеству месяцев умноженное на количество дней между датами(это примерно десять тысяч циклов). Если написать нормальный макрос, то и экран отключать не нужно будет.
Записан

sofi
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Ответ #21: 15 Сентябрь 2014, 14:43 »

Rami, да, как же не определена переменная, если код с нее начинается:
Цитата:
Dim c As Range
Set c = Sheets(3).Range("a39") 'начальная ячейка для заполнения месяцев

У меня вообще неопределенных переменных не бывает, поскольку везде
автоматически ставится Option Explicit!

в
Цитата:
Set c = c(2) или Set c = c.Offset(1, 0)
она просто переопределяется!

Насчет CountDaysMonth, чтобы Вы предложили?
« Последнее редактирование: 15 Сентябрь 2014, 14:49 от sofi » Записан

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 711


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #22: 15 Сентябрь 2014, 14:54 »

Rami, да, как же не определена переменная, если код с нее начинается:
Calc зря ругаться не будет.
Насчет CountDaysMonth, чтобы Вы предложили?
Выкинуть и забыть как страшный сон. Я без него сделал и без отключения экрана, правда ещё не закончил.
Записан

sofi
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Ответ #23: 15 Сентябрь 2014, 15:01 »

Весь в предвкушении! Всё хорошо
Записан

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #24: 15 Сентябрь 2014, 15:02 »

Выкинуть и забыть как страшный сон.
Или сохранить и поместить в музей с табличкой "Так делать нельзя!"... За одну только строчку
Код:
If CountDaysMonth = 0 Then CountDaysMonth = 0
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754


Woe from wit


« Ответ #25: 15 Сентябрь 2014, 16:26 »

в
Цитата:
Set c = c(2) или Set c = c.Offset(1, 0)
она просто переопределяется!
Вы слишком много читали про С++.
Ничего здесь не переопределяется.

Здесь ошибки Бейсика:
1. с(2) - элемент МАССИВА с номером 2, который нигде не определен
2. совпадение имени ПЕРЕМЕННОЙ с и имени МАССИВА с()
Записан
sofi
Форумчанин
***
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Ответ #26: 15 Сентябрь 2014, 20:11 »

Hasim, я не знаю, что по этому поводу написано в С++,
но в VBA это означает, присвоение объектной переменной "с" адреса ячейки,
расположенной ниже на одну ячейку в том же столбце,
относительно последнего адреса записанного в переменную "с".

Вставьте, временно, выше Set c = c(2) или Set c = c.Offset(1, 0)
c(2).Select
и проверьте через F8 в VBA.

P.S.
А вообще, мне очень импонирует, отношение к теме Rami:
Цитата:
Я без него сделал и без отключения экрана, правда ещё не закончил.
« Последнее редактирование: 16 Сентябрь 2014, 07:43 от Helen » Записан

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754


Woe from wit


« Ответ #27: 15 Сентябрь 2014, 21:43 »

Вставьте, временно, выше Set c = c(2) или Set c = c.Offset(1, 0)
c(2).Select
и проверьте через F8 в VBA.
Мы не про VBA говорим, а про Калковский Бейсик.
А в нем этот фокус не проходит.
Записан
kompilainenn
Мастер
*****
Offline Offline

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



« Ответ #28: 16 Сентябрь 2014, 07:22 »

а вот давайте прекратим срач, а? чо бы вам не вернуться в конструктивное русло?
Записан

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

Пол: Женский
Расположение: Екатеринбург
Сообщений: 2 561


WWW
« Ответ #29: 16 Сентябрь 2014, 07:47 »

Абсолютно согласна с Вами, kompilainenn.
Пару сообщений потёрла, чтобы у участников пропало желание продолжать обмениваться колкостями.
Записан
Страниц: « 1 2 3 4 »   Вверх
  Печать  
 
Перейти в:  

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