Установка текущей даты в поле диалога не работает

Автор smagluk, 20 июня 2020, 09:52

0 Пользователи и 1 гость просматривают эту тему.

smagluk

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

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


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. Объектная переменная не установлена.
Не могу понять , что ей надо.


 

rami

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

smagluk

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


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

sokol92

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

smagluk


rami

smagluk и sokol92, какие у вас офисы (версии)?
Цитата: sokol92 от 20 июня 2020, 12:21У меня пример отрабатывает без использования 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

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

Dlg.getModel().getByName("DateField1").Date = CDateToUnoDate(Date())

Не очепятка?
Владимир.

smagluk

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

rami

#8
Цитата: sokol92 от 20 июня 2020, 13:26Не очепятка?
Можно. Это новая (относительно) функция. Наверно, с тех пор, как поменяли формат даты.


smagluk, CdateToIso, нужно заменить на CDateToUnoDate, а CDateFromIso, нужно заменить на CDateFromUnoDate

smagluk

Цитата: sokol92 от 20 июня 2020, 13:26
Rami, а так нельзя написать в #1:

Dlg.getModel().getByName("DateField1").Date = CDateToUnoDate(Date())

Не очепятка?

Вот это то что нужно, спасибо.
работа пошла.

sokol92

Цитата: rami от 20 июня 2020, 13:10smagluk и 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

Это работает:
Dlg.getModel().getByName("DateField1").Text = Date()

smagluk

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

sokol92

#13
Не массивом, а (UNO) структурой.
Владимир.