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

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

20 Ноябрь 2017, 23:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Пол: Мужской
Расположение: Vinnica
Сообщений: 13



« Стартовое сообщение: 14 Июнь 2014, 12:00 »

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

* 14.06.2014.xls (39 Кб - загружено 12 раз.)
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 14 Июнь 2014, 13:26 »

А где макрос, который не работает?
Если нужно в ячейку D1 на всех листах вставить текущую дату, вот макрос
Код:
Sub now_date
For i=0 To ThisComponent.Sheets().Count-1
ThisComponent.Sheets(i).getCellRangeByName("D1").String=now
Next
End Sub
Про вторую дату не понял, она должна браться из ячейки G2 на первом листе? Или как?
И куда вставляться?
« Последнее редактирование: 14 Июнь 2014, 13:36 от rami » Записан

homeandriy
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Vinnica
Сообщений: 13



« Ответ #2: 14 Июнь 2014, 15:29 »

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

Да, как прив"язати этот скрипт на события нажатия кнопки?
Записан
homeandriy
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Vinnica
Сообщений: 13



« Ответ #3: 14 Июнь 2014, 15:38 »

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

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #4: 14 Июнь 2014, 15:49 »

И дата должна бить в формате дд:мм:гггг,
Sub now_date
For i=0 To ThisComponent.Sheets().Count-1
ThisComponent.Sheets(i).getCellRangeByName("D1").String=date
Next
End Sub
« Последнее редактирование: 14 Июнь 2014, 16:15 от rami » Записан

homeandriy
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Vinnica
Сообщений: 13



« Ответ #5: 14 Июнь 2014, 15:53 »

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

вот за ето спасибо.
Осталось не решенным пока вопрос как назанчить етот маккрос на нажатия кнопки.
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #6: 14 Июнь 2014, 16:12 »

Да, как прив"язати этот скрипт на события нажатия кнопки?
На панели инструментов "Элементы управления" нажать кнопку "Режим разработки", потом выделить нужную кнопку (< Вставити сьогоднішню дату у всі вкладки >), откроется окно редактирования, нажать на "События", в строке "Выполнить действие" нажать на кнопку "..."(маленькая кнопка справа), в открывшимся окне нажать на кнопку "макрос...", откроется окно "Выбор макроса", выбрать нужный макрос.
Не забудте выйти из режима разработки.
« Последнее редактирование: 14 Июнь 2014, 16:20 от rami » Записан

homeandriy
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Vinnica
Сообщений: 13



« Ответ #7: 14 Июнь 2014, 17:04 »

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


* event.png (62.88 Кб, 975x549 - просмотрено 96 раз.)
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #8: 14 Июнь 2014, 17:18 »

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


* Снимок экрана 2014-06-14 в 17.38.02.png (206.28 Кб, 1280x800 - просмотрено 64 раз.)
« Последнее редактирование: 14 Июнь 2014, 17:40 от rami » Записан

homeandriy
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Vinnica
Сообщений: 13



« Ответ #9: 14 Июнь 2014, 17:52 »

Спасибо.
Теперь осталось закрыть вопрос со второй кнопкой. Так как я не сильно знаком с програмированием функций в 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
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #10: 14 Июнь 2014, 18:19 »

конечно оно не работает, подправьте пожалуйста
Поправил две вещи: 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
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Vinnica
Сообщений: 13



« Ответ #11: 14 Июнь 2014, 18:46 »

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

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

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #12: 14 Июнь 2014, 18:59 »

Сохраняйте в формате 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:


* Снимок экрана 2014-06-14 в 18.55.00.png (203.94 Кб, 1280x800 - просмотрено 55 раз.)
* 14.06.2014.ods (27.03 Кб - загружено 8 раз.)
« Последнее редактирование: 14 Июнь 2014, 19:11 от rami » Записан

homeandriy
Новичок
*
Offline Offline

Пол: Мужской
Расположение: Vinnica
Сообщений: 13



« Ответ #13: 14 Июнь 2014, 21:08 »

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

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

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #14: 14 Июнь 2014, 21:54 »

Если стирать только числа и текст, то так:
Код:
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
Записан

Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

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