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

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

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

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 3 4 »   Вниз
  Печать  
Автор Тема: Помогите !!! автоматическое добавление даты...  (Прочитано 34749 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ForumOOo (бот)

Offline Offline

Сообщений: 697


« Стартовое сообщение: 7 Июнь 2011, 16:34 »

Компонент: Calc
Версия OpenOffice.org: 3.3.2
Сборка: оригинал
ОС: windows 7 х64 максимальная

Помогите пожалуйста!!!
автоматическое добавление даты или времени в ячейку при изменении значения в соседней ячейки.
формула такого  {=IF(A17>0;NOW();" ")}  типа не подходит.
ввиду перехода на следующие сутки дата тоже измениться во всех ячейках содержащие такую формулу.
желательно с помощью макроса.
есть макрос от excel но он не работает.
{
Private Sub Worksheet_Change(ByVal Target As Range)  
    If Target.Cells.Count > 1 Then Exit Sub  
        If Not Intersect(Target, Range("A10:A1000")) Is Nothing Then  
            With Target(1, 2)  
                .Value = Now  
                .EntireColumn.AutoFit  
            End With  
        End If  
End Sub
}
Заранее Спасибо!.

--
Подпись: GF-7
Эл. почта: jastreb_world3@mail.ru
Записан
RFJ
Форумчанин
***
Offline Offline

Сообщений: 220


« Ответ #1: 7 Июнь 2011, 17:22 »

1 способ (простой):использовать файл xls с макросом Excel - в LibreOffice 3.4 и OpenOffice pro 3.3.2, если включена поддержка VBA, то всё работает хорошо.

2 способ (сложный): файл ods - придется подключать Listener для отслеживания изменения данных на листе Calc (для замены экселевского Worksheet_Change).
Записан

JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


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


WWW
« Ответ #2: 7 Июнь 2011, 19:25 »

3 способ (без макросов): все-таки записать формулу =IF(B17="";IF(A17="";"";NOW());B17) ("Если дата в B17 еще не заполнена то (если в A17 ничего не внесено то оставить B17 пустым иначе поставить в B17 текущие дату-время) иначе оставить B17 как есть" - читается сложно? но работает надежно!)
Чтобы эта формула не выдавала ошибку 522 "Циклическая ссылка" нужно в разделе Сервис - Параметры - Calc - Вычисления включить флажок Итерации.
Записан

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

Сообщений: 220


« Ответ #3: 7 Июнь 2011, 20:19 »

3 способ (JohnSUN) работает не так, как нужно.
Он работает только при изменении значения в ячейке A17 с "пусто" на какое-то значение, например 17.
Но если повторно изменить значение в ячейке A17, т.е. с 17 на 96 (например), то новое значение даты в B17 не запишется, хотя должно по условию задачи.
Записан

maxx_d
Участник
**
Offline Offline

Сообщений: 5


« Ответ #4: 10 Июнь 2011, 17:25 »

Присоединяюсь к просьбе о макросе с добавлением даты в соседнюю ячейку.
Причем, есть потребность 2-х видов:
1. Появление текущей даты при занесении записи в соседнюю ячейку;
2. Возможность выбора даты при клике или двойном клике на определённую ячейку.
Вероятно такое реализовать?
1 способ (простой):использовать файл xls с макросом Excel - в LibreOffice 3.4 и OpenOffice pro 3.3.2, если включена поддержка VBA, то всё работает хорошо.
Этот способ, к сожалению не работает в OOo Calc. Поддержка VBA в OOo включена.
Записан
RFJ
Форумчанин
***
Offline Offline

Сообщений: 220


« Ответ #5: 10 Июнь 2011, 21:28 »

Экселевский макрос можно упростить:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
        If Target(1, 1).Column = 1 Then
                Target(1, 2).Value = Now
        End If
End Sub

и даже так:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
        If Target(1, 1).Column = 1 Then Target(1, 2).Value = Now
End Sub


В столбце А - меняющиеся значения
В столбце В - текущая дата
« Последнее редактирование: 10 Июнь 2011, 21:33 от RFJ » Записан

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

Сообщений: 220


« Ответ #6: 10 Июнь 2011, 21:39 »

Этот способ, к сожалению не работает в OOo Calc. Поддержка VBA в OOo включена.

VBA в Calc будет работать только если в Calc открывается файл Excel (!!!) (file.xls).

VBA в файлах Calc (file.ods) может не работать!
Записан

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

Сообщений: 220


« Ответ #7: 11 Июнь 2011, 10:05 »


Макрос с Listener для вставки текущих даты и времени (аналог экселевского Worksheet_Change):
Код:
Sub addListener
oDocument = ThisComponent
oSheet = oDocument.CurrentController.getActiveSheet()   'получаем активный лист
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 added"
End Sub

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

Now_write(r,c,v)
End Sub

Sub Now_write(r,c,v)
oDoc=ThisComponent
  oSheet=oDoc.Sheets.getByName("Лист1") 'задаем лист для записи текущих даты и времени,
'может в общем случае не совпадать с листом,
'на котором были заданы отслеживаемые ячейки!
  oCell=oSheet.getCellByposition(c+1,r)

oCell.setValue(Now)

If v="" Then
oCell.setValue(v)
End If
End Sub

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

maxx_d
Участник
**
Offline Offline

Сообщений: 5


« Ответ #8: 15 Июнь 2011, 18:25 »

oSheet = oDocument.CurrentController.getActiveSheet()   'получаем активный лист
после этой строки выдается
"ошибка времени выполнения BASIC
Свойство или метод не найдены: Current controller. "
стек вызовов 0:addListener

что-то не так вношу?
Записан
RFJ
Форумчанин
***
Offline Offline

Сообщений: 220


« Ответ #9: 15 Июнь 2011, 19:05 »

1. Покажите ваш файл.

2. Вместо ошибочной строки можно вставить строку с явным указанием листа:
Цитата:
oSheet=oDocument.Sheets.getByName("Лист1")   
Записан

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

Сообщений: 220


« Ответ #10: 15 Июнь 2011, 21:15 »

Вот работающий пример.

[вложение удалено Администратором]
Записан

maxx_d
Участник
**
Offline Offline

Сообщений: 5


« Ответ #11: 16 Июнь 2011, 18:00 »

Спасибо, RFJ!!!
Это напоминает волшебство!

Только вот (не хватает образования) сохраняю этот файл в xls, но в нём не сохраняется макрос. Вроде уже и вручную скопировал его и автозагрузку макроса при открытии поставил...

Галки в "свойствах VBA" в настройках OOo все стоят.

Инымии словами, можно этот файл "now-listener.ods" сохранить, как "now-listener.xls", чтобы в нём работали макросы? Открывать файл предпоагается в OOo.
« Последнее редактирование: 17 Июнь 2011, 09:14 от maxx_d » Записан
RFJ
Форумчанин
***
Offline Offline

Сообщений: 220


« Ответ #12: 26 Июнь 2011, 11:56 »

Цитата:

... сохраняю этот файл в xls, но в нём не сохраняется макрос.
... можно этот файл "now-listener.ods" сохранить, как "now-listener.xls", чтобы в нём работали макросы? Открывать файл предпоагается в OOo.
Можно, но макросы придется хранить не в файле "now-listener.xls", а в самом ООо.
См. картинку.

[вложение удалено Администратором]
Записан

maxx_d
Участник
**
Offline Offline

Сообщений: 5


« Ответ #13: 27 Июнь 2011, 09:21 »

Всё вроде так. Осталось дело за малым. Как сделать "автозапуск"? Вроде прицепляю макрос к открытию файла, но почему то в автомате не срабатывает.
Только после нажатия "выполнить".
Записан
RFJ
Форумчанин
***
Offline Offline

Сообщений: 220


« Ответ #14: 27 Июнь 2011, 11:05 »

Как сделать "автозапуск"?
Цитата:
... хранить в самом LibreOffice (OpenOffice).


[вложение удалено Администратором]
« Последнее редактирование: 27 Июнь 2011, 11:08 от RFJ » Записан

Страниц: 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!