Список форумов Форум Libreoffice

Форум Libreoffice

Добро пожаловать на Форум Libreoffice!
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

English French German Italian Portuguese Russian Spanish
Пересчет (F9) пользовательской функции (типа Volatile)

 
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Basic
Предыдущая тема :: Следующая тема  
Автор Сообщение
raptor



Репутация: 0    

Зарегистрирован: 02.08.2011
Сообщения: 9

СообщениеДобавлено: Вт Ноя 29, 2011 9:51 am    Заголовок сообщения: Пересчет (F9) пользовательской функции (типа Volatile) Ответить с цитатой

Если вы создаете собственную пользовательскую функцию и используете её (и только её) в ячейке листа Calc, то при нажатии F9 она не пересчитывается, в отличие от встроенных в Calc функций.
Например, функция, возвращающая номер строки выбранной ячейки на листе Calc:
Код:
Function srown()
On Error GoTo EEE
oCell = ThisComponent.CurrentSelection
srown = oCell.cellAddress.Row
Exit Function
EEE:
srown=0
End Function

вставлена в ячейку A1:
=SROWN()
При выделении любой другой ячейки на листе и нажатии F9 в ячейке A1 должен отобразиться номер строки выделенной ячейки, но этого не происходит, функция SROWN() не пересчитывается.
Чтобы она пересчитывалась, в ячейку A1 следует добавить такую встроенную функцию Calc, которая при этом не меняла бы значение функции SROWN() и не имела бы аргументов (чтобы не усложнять решение задачи). Единственная функция, которая удовлетворяет этому условию - функция RAND(), умноженная на 0 (нуль).
Если в ячейку A1 вставить такую функцию (составную):
=SROWN()+RAND()*0
то пересчет значения в A1 при нажатии F9 происходит успешно.


Последний раз редактировалось: raptor (Ср Ноя 30, 2011 1:53 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
JohnSUN



Репутация: 0    

Зарегистрирован: 29.08.2011
Сообщения: 39
Откуда: Киев, Украина

СообщениеДобавлено: Вт Ноя 29, 2011 4:42 pm    Заголовок сообщения: Ответить с цитатой

А Ctrl+Shift+F9?


Прием интересный. Но нужно помнить, что он сработает только для числовых функций. Для текстовых функций придется писать что-то вроде
=SROWN() & IF(RAND();"";"")
_________________
Владислав Орлов aka JohnSUN
LibreOffice 3.4.0 OOO340m1 (Build:12) WinXP SP2
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
RFJ



Репутация: +1    

Зарегистрирован: 02.08.2011
Сообщения: 59

СообщениеДобавлено: Вт Ноя 29, 2011 8:07 pm    Заголовок сообщения: Ответить с цитатой

=SROWN()+RAND()*0
Функции такого типа относятся к типу Volatile (по терминологии VBA), они пересчитываются автоматически при изменении данных на листе Calc (и даже формата данных (цвет, шрифт, фон).
Для проверки достаточно ввести или изменить данные (или формат) в любой ячейке листа и значение в А1 изменится (нажимать F9 не потребуется).
А вот без RAND не изменится.
Вместо RAND можно взять NOW или TODAY.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Basic Часовой пояс: GMT
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Вы можете бесплатно создать форум на MyBB2.ru, RSS