При нажатии кнопки у вибрание ячейки устанавливалась текущая дата

Автор homeandriy, 14 июня 2014, 13:00

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

homeandriy

Доброго времени суток.
Вообщем есть документ, который когда то работал в  Exel.
теперь же перевели на Libre Office и конечно же макрос не работает.
Нужно как то ли поправить документ или что то придумать, что б при нажатии кнопки (у вкладке 1) вставлялась текущая дата (кнопка "Вставити сьогоднішню дату у всі вкладки") у все вкладки там где помечено "Сюда сегодняшнюю дату" .
А первая кнопка ("Вставити вибрану дату у всы вкладки---->") нужно чтоб в поле по соседству (G2) в писаный текст вставлялся у все вкладки  которые отмесены "Сюда сегодняшнюю дату"
Есть ли какие то варианты, помогите пожалуйста.

rami

А где макрос, который не работает?
Если нужно в ячейку D1 на всех листах вставить текущую дату, вот макрос
Sub now_date
For i=0 To ThisComponent.Sheets().Count-1
ThisComponent.Sheets(i).getCellRangeByName("D1").String=now
Next
End Sub

Про вторую дату не понял, она должна браться из ячейки G2 на первом листе? Или как?
И куда вставляться?

homeandriy

Да все верно. В ячейку G2 вставляется дата (пишеться от руки) а в ячейку D1 у всех листах вставляется значения с G2, после нажатия кнопки "Вставити вибрану дату у всы вкладки---->"

Да, как прив"язати этот скрипт на события нажатия кнопки?

homeandriy

И дата должна бить в формате дд:мм:гггг,
так как now возвращает "14.06.2014 15:35:57". Если не сложно

rami

Цитата: homeandriy от 14 июня 2014, 15:38И дата должна бить в формате дд:мм:гггг,
Sub now_date
For i=0 To ThisComponent.Sheets().Count-1
ThisComponent.Sheets(i).getCellRangeByName("D1").String=date
Next
End Sub

homeandriy

Цитата: rami от 14 июня 2014, 15:49Sub now_date
For i=0 To ThisComponent.Sheets().Count-1
ThisComponent.Sheets(i).getCellRangeByName("D1").String=date
Next
End Sub

вот за ето спасибо.
Осталось не решенным пока вопрос как назанчить етот маккрос на нажатия кнопки.

rami

Цитата: homeandriy от 14 июня 2014, 15:29Да, как прив"язати этот скрипт на события нажатия кнопки?
На панели инструментов "Элементы управления" нажать кнопку "Режим разработки", потом выделить нужную кнопку (< Вставити сьогоднішню дату у всі вкладки >), откроется окно редактирования, нажать на "События", в строке "Выполнить действие" нажать на кнопку "..."(маленькая кнопка справа), в открывшимся окне нажать на кнопку "макрос...", откроется окно "Выбор макроса", выбрать нужный макрос.
Не забудте выйти из режима разработки.

homeandriy

Ну как би зашел в нужную вкладку, а там такое меню (картинка во вложении) и нет варианта "при нажатии". что можеть бить?

rami

Это не то окно. Вы нажали на кнопку "Свойства формы", а нужно "Элемент управления"

homeandriy

Спасибо.
Теперь осталось закрыть вопрос со второй кнопкой. Так как я не сильно знаком с програмированием функций в LibreOffice то написал интуитивно код (то есть добавил до старого).
так чтоб переменная GetDate должна получить значение с ячейки G2 и по старому алгоритму скопировать у все листы (ячейка D1)
конечно оно не работает, подправьте пожалуйста


Sub InsGetDate
Dim GetDate=ThisComponent.Sheets(1).getCellRangeByName("G2").String
For i=0 To ThisComponent.Sheets().Count-1
ThisComponent.Sheets(i).getCellRangeByName("D1").String=GetDate
Next
End Sub

rami

Цитата: homeandriy от 14 июня 2014, 17:52конечно оно не работает, подправьте пожалуйста
Поправил две вещи: 1) Dim не на месте, он объявляет тип переменной
2) номер первого листа ноль, а не один(счёт начинается с нуля)
Sub InsGetDate
Dim GetDate As String
GetDate=ThisComponent.Sheets(0).getCellRangeByName("G2").String
For i=0 To ThisComponent.Sheets().Count-1
ThisComponent.Sheets(i).getCellRangeByName("D1").String=GetDate
Next
End Sub

Это если дата должна быть в формате строки, если дата должна быть числом, сообщите

homeandriy

Спасибо, за объявление переменной в String ,уже догадался. Остальное не знал. Все работает.

Вопрос. Я открываю Сервис>Макросы>управление макросами>Бейсик.
выбираю документ (в данном случае 14,06,2014) вставляю туда код (кнопка "править"), потом назначаю на кнопки исполнения кода, сохраняю. Закрываю документ полностью.
Захожу вновь в документ (14,06,2014), а там нет теперь кода, он куда то пропадает. В чем может бить проблема.
Сохранять в "мои макросы" нет смысла, так как в документ будут "стучатся" много людей, и у каждого должен бить соответствующий функционал.
как решить проблему?

rami

Сохраняйте в формате ODF. Если пропали макросы вот копия:

Sub now_date
For i=0 To ThisComponent.Sheets().Count-1
ThisComponent.Sheets(i).getCellRangeByName("D1").String=date
Next
End Sub

Sub InsGetDate
Dim GetDate As String
GetDate=ThisComponent.Sheets(0).getCellRangeByName("G2").String
For i=0 To ThisComponent.Sheets().Count-1
ThisComponent.Sheets(i).getCellRangeByName("D1").String=GetDate
Next
End Sub

А вот документ в формате ODF:

homeandriy

Спасибо все сделал помогло.

Еще вопрос.
Нужно написать макрос, который на всех Листах чистил диапазон ячеек В3;В50 и D3:D50
по сути ми должны тем самим перебором выделять этот диапазон и присваивать им " "

rami

Если стирать только числа и текст, то так:
Sub Clear_data
For i=0 To ThisComponent.Sheets().Count-1
ThisComponent.Sheets(i).getCellRangeByName("B3:D50").clearContents(com.sun.star.sheet.CellFlags.VALUE OR _
    com.sun.star.sheet.CellFlags.STRING)
Next
End Sub