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

Форум Libreoffice

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

English French German Italian Portuguese Russian Spanish
Аналог Worksheet_Change (MS Excel) для Calc

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



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

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

СообщениеДобавлено: Пт Сен 30, 2011 7:18 am    Заголовок сообщения: Аналог Worksheet_Change (MS Excel) для Calc Ответить с цитатой

Аналог Worksheet_Change (MS Excel), отслеживающего изменения значений ячеек на листе Calc, можно написать, используя Listener XChartDataChangeEventListener.
Пример макроса с его использованием для вставки текущего значения времени в ячейку столбца B при изменении значения ячейки в столце А (в той же строке). То есть, в ячейку столбеца B записывается время последнего изменения соответствующей ячейки в столбце А.
Код:
Sub addListener
   oDocument = ThisComponent
   oSheet = oDocument.CurrentController.getActiveSheet() ' get actual sheet
   oListener = CreateUnoListener( "OOO_", "com.sun.star.chart.XChartDataChangeEventListener" )

'Задаем ячейки, которые будем отслеживать (на активном листе), в данном случае "A1:A101"
   
   For s=0 To 100
      oCell = oSheet.getCellByPosition(0,s)
      oCell.addChartDataChangeEventListener(oListener)
   Next
MsgBox "Listener Add"
End Sub


Sub OOO_chartDataChanged(oEvent)
   r=oEvent.Source.CellAddress.Row
   c=oEvent.Source.CellAddress.Column
   v=oEvent.Source.String

   oDoc=ThisComponent

'задаем лист для записи текущих даты и времени,
'может в общем случае не совпадать с листом,
'на котором были заданы отслеживаемые ячейки

    oSheet=oDoc.Sheets.getByName("Лист1")

     oCell=oSheet.getCellByposition(c+1,r)
 
   If c=0 Then
        oCell.setValue(Now)
        If v="" Then
           oCell.setValue(v)
        End If
   End If
End Sub


Для правильной работы следует сначала выполнить макрос addListener, запускающий "отслеживание изменений".

Можно "повесить" запуск этого макроса на событие "Открытие файла". В этом случае макрос addListener будет запускаться автоматически при открытии файла.

Демонстрационный пример http://ifolder.ru/26077507




Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Basic Часовой пояс: GMT
Страница 1 из 1

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


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