Дата в ячейке в зависимости от выбора.

Автор Wiagra999, 11 февраля 2020, 22:46

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

Wiagra999

Уважаемые форумчане.
Подскажите есть такая возможность. Пример.
Есть 4 ячейки. В 1 из них список выбора Отправил, Переслал, Закрыл. И есть 3 столбца которые называются Дата Отправки, Дата Пересылки, Дата завершения.
Допустим в ячейке 1 я выбрал "Отправил" необходимо что в столбце "Дата отправки" проставлялась сегодняшняя дата, и она оставалась навсегда, то есть не менялась, если я открою к примеру через неделю.
Не знаю, поймете или нет, чего я хочу. Просто немогу сюда загрузить файл, так как пишу с работы. Нельзя отправлять файлы.
Может есть такая формула.
Подскажите пож. очень облегчит работу.

bigor

Добрый день

Хотелку вашу можно только макросом сделать.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Wiagra999

Цитата: Wiagra999 от 11 февраля 2020, 22:46Добрый день

Хотелку вашу можно только макросом сделать.
Вы не подскажите макрос?

Rafik

#3
приблизительно как-то так Sub Izmeneno(oEvent)
' привязать этот макрос к событию листа "Содержимое изменено"
' Если в первой колонке выбран "Отправил", то во вторую запишет текущую дату
'---- Координаты диапазона, после изменения которого вызвана. Индекс Первой колонки не интересует, поэтому не смотрим её
' Последняя колонка диапазона. Если вызван из ячейки, то Start=End
nCol = oEvent.RangeAddress.EndColumn
nRow = oEvent.RangeAddress.StartRow
nRow_end = oEvent.RangeAddress.EndRow
' Текущий лист
oSheet = ThisComponent.Sheets(oEvent.RangeAddress.Sheet)
' Если хвост диапазона в первой колонке и одна ячейка
If (nCol=0) And (nRow = nRow_end) Then
               ' новое значение  "Отправил"?
               If (oEvent.string = "Отправил") Then
' заполняем ячейку второй колонки
oSheet.getCellByPosition(1,nRow).Value = Now
End If
End If
End Sub

Wiagra999

Цитата: Rafik от 13 февраля 2020, 07:15приблизительно как-то так
Да макрос работает, но если у меня не ячейка А1 и B2.
К примеру у меня значение отправил в Е1 и F1
Как изменить?

Wiagra999

Вот так вообще не работает. Не силён я в макросах(( Видимо не судьба облегчить.
Sub Izmeneno(oEvent)
' привязать этот макрос к событию листа "Содержимое изменено"
' Если в первой колонке выбран "Отправил", то во вторую запишет текущую дату
'---- Координаты диапазона, после изменения которого вызвана. Индекс Первой колонки не интересует, поэтому не смотрим её
' Последняя колонка диапазона. Если вызван из ячейки, то Start=End
nCol = oEvent.RangeAddress.EndColumn
nRow = oEvent.RangeAddress.StartRow
nRow_end = oEvent.RangeAddress.EndRow
' Текущий лист
oSheet = ThisComponent.Sheets(oEvent.RangeAddress.Sheet)
' Если хвост диапазона в первой колонке и одна ячейка
If (nCol=0) And (nRow = nRow_end) Then
                ' новое значение  "Отправил"?
                If (oEvent.string = "Отправил") Then
' заполняем ячейку второй колонки
oSheet.getCellByPosition(2,nRow).Value = Now
If (nCol=0) And (nRow = nRow_end) Then
                ' новое значение  "Переслал"?
                If (oEvent.string = "Переслал") Then
' заполняем ячейку второй колонки
oSheet.getCellByPosition(3,nRow).Value = Now
If (nCol=0) And (nRow = nRow_end) Then
                ' новое значение  "Переслал"?
                If (oEvent.string = "Закрыл") Then
' заполняем ячейку второй колонки
oSheet.getCellByPosition(4,nRow).Value = Now

   
End If
End If

Wiagra999

Цитата: Rafik от 13 февраля 2020, 07:15приблизительно как-то так
Пожалуйста помогите, сделать.

bigor

Пробуйте
Sub Izmeneno(oEvent)
' привязать этот макрос к событию листа "Содержимое изменено"
' Если в первой колонке выбран "Отправил", то во вторую запишет текущую дату
'---- Координаты диапазона, после изменения которого вызвана. Индекс Первой колонки не интересует, поэтому не смотрим её
' Последняя колонка диапазона. Если вызван из ячейки, то Start=End
nCol = oEvent.RangeAddress.EndColumn
nRow = oEvent.RangeAddress.StartRow
nRow_end = oEvent.RangeAddress.EndRow
' Текущий лист
oSheet = ThisComponent.Sheets(oEvent.RangeAddress.Sheet)
' Если хвост диапазона в первой колонке и одна ячейка

If (nCol=0) And (nRow = nRow_end) Then

Select Case oEvent.String
Case "Отправил"
       oSheet.getCellByPosition(2,nRow).Value = Now
                      Case "Переслал"
oSheet.getCellByPosition(3,nRow).Value = Now
Case "Закрыл"
          oSheet.getCellByPosition(4,nRow).Value = Now
End Select
End If
End sub
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Rafik

У меня пример макроса привязан к первой колонке в условии If (nCol=0) And ... Наверное надо немного переделать условие и добавить ещё одну строку. Внесём изменения, чтобы проверить: "выделенный диапазон равен одной ячейке?" Вот список правок в код:
     ' Добавим сюда
nCol = oEvent.RangeAddress.EndColumn
' Добавляемая строка
nCol_start = oEvent.RangeAddress.StartColumn
...
' Условие перепишем так:
If (nCol = nCol_start) And (nRow = nRow_end) Then ' Выделена только одна ячейка?
' далее оставим как есть

Wiagra999

Цитата: Rafik от 21 февраля 2020, 07:15У меня пример макроса привязан к первой колонке в условии If (nCol=0) And ... Наверное надо немного переделать условие и добавить ещё одну строку. Внесём изменения, чтобы проверить: "выделенный диапазон равен одной ячейке?" Вот список правок в код:
Спасибо большое!!