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

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

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

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

Сообщений: 4


« Стартовое сообщение: 14 Январь 2020, 16:20 »

Здравствуйте, пытаюсь сделать так, чтобы фиксировалась дата редактирования ячейки. Знаю, темы тут уже такие были, и я делал по этому документу https://forumooo.ru/index.php/topic,6577.msg42231.html#msg42231 но формула отсюда вообще не работает, либо ошибка 523. Сделал по своей логике, но программа отказывается выводить значение в ячейке, пишет ошибку 523. И как бы я не менял формулу, то пишет ошибку, то дату выводит неверную (30.12.99). Макросы начинал делать в документе, но сохранил, открыл документ и они все исчезли


* СКРИН1.JPG (52.92 Кб, 327x675 - просмотрено 6 раз.)

* СКРИН2.JPG (51.36 Кб, 302x673 - просмотрено 5 раз.)

* СКРИН3.JPG (54.84 Кб, 634x585 - просмотрено 5 раз.)
Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #1: 14 Январь 2020, 16:56 »

Да там же JohnSUN и пишет:
Цитата:
Но гарантировать, что после сохранения и повторного открытия книги мы увидим ту же дату, нельзя – разные версии по-разному ведут себя в этой ситуации

Поэтому макрос надежнее
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 109


« Ответ #2: 14 Январь 2020, 17:08 »

А если использовать штатный функционал (включить оба пункта):

 - Правка/Отслеживать изменения
 - Сервис/Совместно использовать 

В результате видны в комментариях дата/время изменений, кто изменил и что на что. 
 
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Snyppi
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #3: 15 Январь 2020, 08:48 »

Поэтому макрос надежнее
Хорошо, поставил я макросы. onChangeSingleCell работает.  onChangeRange скопировал тоже самое, поменял ячейки и не хочет никак работать. Естественно, макрос в событии листа меняю

Код:
REM  *****  BASIC  *****
Rem (©) Vladislav Orlov aka JohnSUN, Kyiv, 2017
Rem mailto:johnsun@i.ua


Option Explicit
Option Base  0

Sub onChangeSingleCell(oEvent As Variant)
Dim oCell As Variant
If oEvent.AbsoluteName = "$БУМАГА.$G$5" Then
oCell = oEvent.getSpreadsheet().getCellRangeByName("$БУМАГА.$G$4")
If oCell.getString()="" Then oCell.setFormula(Format(Now, "DD.MM.YYYY HH:mm:SS"))
EndIf
End Sub

Sub onChangeRange(oEvent As Variant)
Dim oSheet As Variant
Dim oCellWithData As Variant
Dim oChangedRanges As Variant
Dim oRangeToDate As Variant
Dim oRange As Variant
Dim oEditRange As Variant
Dim oRows As Variant
Dim oRow As Variant
Dim oCells As Variant
Dim oCell As Variant
Dim i As Long
On Error Resume Next
oSheet = oEvent.getSpreadsheet()
oCellWithData = oSheet.getCellRangeByName("G5:I35")
oChangedRanges = oCellWithData.queryIntersection(oEvent.getRangeAddress())
If IsEmpty(oChangedRanges) Then Exit Sub

oRangeToDate = oSheet.getCellRangeByName("G4:I4").queryEmptyCells()
If IsEmpty(oRangeToDate) Then Exit Sub
For Each oRange In oChangedRanges
oRows = oRange.getRows()
For i = 0 To oRows.getCount()-1
oRow = oRows.getByIndex(i)
oEditRange = oRangeToDate.queryIntersection(oRow.getRangeAddress())
If Not IsEmpty(oEditRange) Then
For Each oCell In oEditRange
oCell.setFormula(Format(Now, "DD.MM.YYYY HH:mm:SS"))
Next oCell
EndIf
Next i
Next oRange
End Sub


* СКРИН4.JPG (62.31 Кб, 441x612 - просмотрено 4 раз.)
Записан
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 666


« Ответ #4: 15 Январь 2020, 09:02 »

А почему в макросе проверяются изменённые строки - oRows = oRange.getRows() и далее? Там же должны искаться изменённые данные в столбцах?
Записан

С уважением,
Михаил Каганский
Snyppi
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #5: 15 Январь 2020, 09:34 »

Там же должны искаться изменённые данные в столбцах?
Как правильно написать для столбцов?
Записан
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 666


« Ответ #6: 15 Январь 2020, 09:40 »

Код:
Sub onChangeRange(oEvent As Variant)
Dim oSheet, oCellWithData, oChangedRanges, oRangeToDate, oRange, oEditRange, oCols, oCol, oCells, oCell
Dim i As Long
On Error Resume Next
oSheet = oEvent.getSpreadsheet()
oCellWithData = oSheet.getCellRangeByName("G5:I35")
oChangedRanges = oCellWithData.queryIntersection(oEvent.getRangeAddress())
If IsEmpty(oChangedRanges) Then Exit Sub

oRangeToDate = oSheet.getCellRangeByName("G4:I4").queryEmptyCells()
If IsEmpty(oRangeToDate) Then Exit Sub
For Each oRange In oChangedRanges
oCols = oRange.getColumns()
For i = 0 To oCols.getCount()-1
oCol = oCols.getByIndex(i)
oEditRange = oRangeToDate.queryIntersection(oCol.getRangeAddress())
If Not IsEmpty(oEditRange) Then
For Each oCell In oEditRange
oCell.setFormula(Format(Now, "DD.MM.YYYY HH:mm:SS"))
Next oCell
EndIf
Next i
Next oRange
End Sub
Записан

С уважением,
Михаил Каганский
Snyppi
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #7: 15 Январь 2020, 09:56 »

mikekaganski, спасибо большое! Всё работает
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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