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

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

5 Июль 2020, 15:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Сообщений: 7


« Стартовое сообщение: 20 Июнь 2020, 09:52 »

Здравствуйте

У меня в макросе  для ООО все прекрасно работало  
Код:

REM Процедура при запуске диалога
DialogLibraries.LoadLibrary("Standard")

REM Создаем диалог
Dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)

REM Установим начальную дату в СЕГОДНЯ
Dlg.getModel().getByName("DateField1").Date = CdateToIso(Date())

Теперь установили Libreoffice  и Dlg.getModel().getByName("DateField1").Date = CdateToIso(Date())    пишет Ошибка времени выполнения Basic. Объектная переменная не установлена.
Не могу понять , что ей надо.


  
« Последнее редактирование: 20 Июнь 2020, 10:40 от smagluk » Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 20 Июнь 2020, 11:21 »

В строке кода Dlg.getModel().getByName("DateField1").Date = CdateToIso(Date()) замените Date на Text так: Dlg.getModel().getByName("DateField1").Text = CdateToIso(Date())
Записан

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

Сообщений: 7


« Ответ #2: 20 Июнь 2020, 11:31 »

Не работает.
Точнее не ругается на переменную, но поле DateField1 в диалоге не заполняет. Отображается дата по умолчанию.


Может файл поможет.

* Тест.ods (21.8 Кб - загружено 8 раз.)
« Последнее редактирование: 20 Июнь 2020, 11:37 от smagluk » Записан
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #3: 20 Июнь 2020, 12:21 »

У меня пример отрабатывает без использования CdateToIso, т.е. =Date()
Записан

Владимир.
smagluk
Участник
**
Offline Offline

Сообщений: 7


« Ответ #4: 20 Июнь 2020, 12:42 »

Придется дальнейшую логику менять.   Плачущий
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #5: 20 Июнь 2020, 13:10 »

smagluk и sokol92, какие у вас офисы (версии)?
У меня пример отрабатывает без использования CdateToIso, т.е. =Date()
У меня в LibreOffice  6.4.3.2 не работает, не тот формат даты, но если изменить формат даты, то нормально.

smagluk, измените в вашем коде:
1. Dim DateField1          As    New com.sun.star.util.Date вместо As Date (у вас эта переменная не использовалась, но если нужна, создайте новую)

2. вместо строки кода: Dlg.getModel().getByName("DateField1").Date = CdateToIso(Date())
Код:
DateField1.Day = DatePart("d", Date())
DateField1.Month = DatePart("m", Date())
DateField1.Year = DatePart("yyyy", Date())
Dlg.getModel().getByName("DateField1").Date = DateField1
Записан

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

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


WWW
« Ответ #6: 20 Июнь 2020, 13:26 »

Rami, а так нельзя написать в #1:

Код:
Dlg.getModel().getByName("DateField1").Date = CDateToUnoDate(Date())

Не очепятка?
Записан

Владимир.
smagluk
Участник
**
Offline Offline

Сообщений: 7


« Ответ #7: 20 Июнь 2020, 13:31 »

Как то сложно.
работать через текстовое поле  я еще могу понять, но чтобы в офисе отсутствовал механизм работы с датами, такого не может быть.
Ведь и то и то работает
MsgBox Date()                          -20.06.2020
MsgBox CdateToIso(Date())         -20200620
Значит в  поле диалога что-то поменяли и значения только текстовые теперь?
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #8: 20 Июнь 2020, 13:40 »

Не очепятка?
Можно. Это новая (относительно) функция. Наверно, с тех пор, как поменяли формат даты.


smagluk, CdateToIso, нужно заменить на CDateToUnoDate, а CDateFromIso, нужно заменить на CDateFromUnoDate
« Последнее редактирование: 20 Июнь 2020, 13:48 от rami » Записан

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

Сообщений: 7


« Ответ #9: 20 Июнь 2020, 13:53 »

Rami, а так нельзя написать в #1:

Код:
Dlg.getModel().getByName("DateField1").Date = CDateToUnoDate(Date())

Не очепятка?

Вот это то что нужно, спасибо.
работа пошла.
Записан
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #10: 20 Июнь 2020, 13:56 »

smagluk и sokol92, какие у вас офисы (версии)?

Проверил на 6.4.3.2 Ubuntu en-US и на 6.4.4.2 (x64) Win10 ru-RU

Для тех версий Basic, где нет "Date-Uno" функций (например, VBA Улыбка) их можно написать:

Код:
Function CdateToUnoDate(ByVal d) As Object
   Dim ud As Object
   Set ud = CreateUnoStruct("com.sun.star.util.Date")
   With ud
     .Year = Year(d)
     .Month = Month(d)
     .Day = Day(d)
   End With
   Set CdateToUnoDate = ud
End Function

Function CdateFromUnoDate(ByVal ud) As Date
   With ud
     CdateFromUnoDate = DateSerial(.Year, .Month, .Day)
   End With
End Function
Записан

Владимир.
bk
Участник
**
Offline Offline

Сообщений: 18


« Ответ #11: 20 Июнь 2020, 13:57 »

Это работает:
Dlg.getModel().getByName("DateField1").Text = Date()
Записан
smagluk
Участник
**
Offline Offline

Сообщений: 7


« Ответ #12: 20 Июнь 2020, 14:10 »

Всем спасибо, вроде разобрался. В опен дата была одной строкой. А сейчас как я понял, немного по другому. Поле дата является "массивом" из 3ех значений Дата, месяц и год. Верно?
Записан
sokol92
Форумчанин
***
Offline Offline

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


WWW
« Ответ #13: 20 Июнь 2020, 14:12 »

Не массивом, а (UNO) структурой.
« Последнее редактирование: 20 Июнь 2020, 15:19 от sokol92 » Записан

Владимир.
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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