Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос добавления даты по изменению - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Макрос добавления даты по изменению
mlenar Дата: Пятница, 14.08.2015, 11:49 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Имеется вот такой код:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

For Each cell In Target
If cell Like "оплачено*" Then
If Not Intersect(cell, Range("O1:O2000")) Is Nothing Then
With cell.Offset(0, -3)
.Value = Date
End With
End If
End If
Next cell
End Sub
[/vba]
Который, когда в столбце О находит слово "оплачено", вставляет дату в столбец L. Все работает, если вводить текст в столб О вручную. Вопрос: как сделать так, чтобы макрос работал, если в ячейку О слово "оплачено" вводится формулой. то есть формула примерно такая: если в столбце М цифра >0, то выводить "долг", иначе "оплачено". Соответственно надо, чтобы в столбце L появлялась дата полной оплаты. Очень надеюсь на вашу помощь, спасибо!
[moder]Для кода есть кнопка #. Под спойлер, если код не слишком большой, его засовывать не нужно. Поправил Вам.
И приложите файл.


Сообщение отредактировал _Boroda_ - Пятница, 14.08.2015, 11:53
 
Ответить
СообщениеИмеется вот такой код:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)

For Each cell In Target
If cell Like "оплачено*" Then
If Not Intersect(cell, Range("O1:O2000")) Is Nothing Then
With cell.Offset(0, -3)
.Value = Date
End With
End If
End If
Next cell
End Sub
[/vba]
Который, когда в столбце О находит слово "оплачено", вставляет дату в столбец L. Все работает, если вводить текст в столб О вручную. Вопрос: как сделать так, чтобы макрос работал, если в ячейку О слово "оплачено" вводится формулой. то есть формула примерно такая: если в столбце М цифра >0, то выводить "долг", иначе "оплачено". Соответственно надо, чтобы в столбце L появлялась дата полной оплаты. Очень надеюсь на вашу помощь, спасибо!
[moder]Для кода есть кнопка #. Под спойлер, если код не слишком большой, его засовывать не нужно. Поправил Вам.
И приложите файл.

Автор - mlenar
Дата добавления - 14.08.2015 в 11:49
Udik Дата: Пятница, 14.08.2015, 13:39 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Ну так можно
[vba]
Код

Private Sub Worksheet_Change(ByVal Target As Range)
Const strRng As String = "O1:O2000"
Const dR As Integer = 0, dC As Integer = -3
For Each cell In Target
If cell Like "оплачено*" Then
       If Not Intersect(cell, Range(strRng)) Is Nothing Then cell.Offset(dR, dC).Value = Date
End If
Next cell

For Each cell In Range(strRng)
       If (cell Like "оплачено*") And (cell.Offset(dR, dC).Value = "") Then cell.Offset(dR, dC).Value = Date
Next cell

End Sub

[/vba]

Маленькая фича - пока в связанной ячейке стоит "оплачено", сделать ячейку с датой пустой не выйдет - опять вставится текущая.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Пятница, 14.08.2015, 13:52
 
Ответить
СообщениеНу так можно
[vba]
Код

Private Sub Worksheet_Change(ByVal Target As Range)
Const strRng As String = "O1:O2000"
Const dR As Integer = 0, dC As Integer = -3
For Each cell In Target
If cell Like "оплачено*" Then
       If Not Intersect(cell, Range(strRng)) Is Nothing Then cell.Offset(dR, dC).Value = Date
End If
Next cell

For Each cell In Range(strRng)
       If (cell Like "оплачено*") And (cell.Offset(dR, dC).Value = "") Then cell.Offset(dR, dC).Value = Date
Next cell

End Sub

[/vba]

Маленькая фича - пока в связанной ячейке стоит "оплачено", сделать ячейку с датой пустой не выйдет - опять вставится текущая.

Автор - Udik
Дата добавления - 14.08.2015 в 13:39
mlenar Дата: Пятница, 14.08.2015, 14:03 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
работает, спасибо большое)
 
Ответить
Сообщениеработает, спасибо большое)

Автор - mlenar
Дата добавления - 14.08.2015 в 14:03
mlenar Дата: Пятница, 14.08.2015, 14:30 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Udik, тогда уж тоже спрошу маленькую штуку. Вот если изменилось значение с оплачено на долг - можно ли сделать так, чтобы дата убралась?
 
Ответить
СообщениеUdik, тогда уж тоже спрошу маленькую штуку. Вот если изменилось значение с оплачено на долг - можно ли сделать так, чтобы дата убралась?

Автор - mlenar
Дата добавления - 14.08.2015 в 14:30
Udik Дата: Пятница, 14.08.2015, 14:54 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
т.е. если в проверяемом диапазоне стало долг, то ячейка с датой должна очиститься?


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщениет.е. если в проверяемом диапазоне стало долг, то ячейка с датой должна очиститься?

Автор - Udik
Дата добавления - 14.08.2015 в 14:54
mlenar Дата: Пятница, 14.08.2015, 15:27 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
да. то есть дата должна стоять ТОЛЬКО в том случае, если в очейке столбца О стоит слово "оплачено". во всех иных случаях ячейка должна быть пустой
 
Ответить
Сообщениеда. то есть дата должна стоять ТОЛЬКО в том случае, если в очейке столбца О стоит слово "оплачено". во всех иных случаях ячейка должна быть пустой

Автор - mlenar
Дата добавления - 14.08.2015 в 15:27
Udik Дата: Пятница, 14.08.2015, 15:44 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Тогда так
[vba]
Код

Private Sub Worksheet_Change(ByVal Target As Range)
Const strRng As String = "O1:O2000", strOp As String = "оплачено*"
Const dR As Integer = 0, dC As Integer = -3

For Each cell In Range(strRng)
     If (cell Like strOp) And (cell.Offset(dR, dC).Value = "") Then cell.Offset(dR, dC).Value = Date
     If (Not (cell Like strOp)) And (cell.Offset(dR, dC).Value <> "") Then cell.Offset(dR, dC).Value = ""

Next cell

End Sub
[/vba]
Сейчас проверяет на присутствие последовательности оплачено, т.е. оплачено+что-то_ещё тоже отловит.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеТогда так
[vba]
Код

Private Sub Worksheet_Change(ByVal Target As Range)
Const strRng As String = "O1:O2000", strOp As String = "оплачено*"
Const dR As Integer = 0, dC As Integer = -3

For Each cell In Range(strRng)
     If (cell Like strOp) And (cell.Offset(dR, dC).Value = "") Then cell.Offset(dR, dC).Value = Date
     If (Not (cell Like strOp)) And (cell.Offset(dR, dC).Value <> "") Then cell.Offset(dR, dC).Value = ""

Next cell

End Sub
[/vba]
Сейчас проверяет на присутствие последовательности оплачено, т.е. оплачено+что-то_ещё тоже отловит.

Автор - Udik
Дата добавления - 14.08.2015 в 15:44
mlenar Дата: Пятница, 14.08.2015, 16:23 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Друг, нюанс такой. теперь если опустошаю ячейку столбца О, то дата исчезает, все ок. А когда при помощи формулы там появляется слово "долг", то почему-то дата так и стоит. я так понимаю, остается лишь ручное опустошение?)


Сообщение отредактировал mlenar - Пятница, 14.08.2015, 16:28
 
Ответить
СообщениеДруг, нюанс такой. теперь если опустошаю ячейку столбца О, то дата исчезает, все ок. А когда при помощи формулы там появляется слово "долг", то почему-то дата так и стоит. я так понимаю, остается лишь ручное опустошение?)

Автор - mlenar
Дата добавления - 14.08.2015 в 16:23
RAN Дата: Пятница, 14.08.2015, 17:16 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
как сделать так, чтобы макрос работал, если в ячейку О слово "оплачено" вводится формулой

При пересчете формул события Worksheet_Change не возникает, так что читай комментарий модератора.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
как сделать так, чтобы макрос работал, если в ячейку О слово "оплачено" вводится формулой

При пересчете формул события Worksheet_Change не возникает, так что читай комментарий модератора.

Автор - RAN
Дата добавления - 14.08.2015 в 17:16
Udik Дата: Пятница, 14.08.2015, 22:20 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
дата так и стоит

У меня вроде все чистит кроме строк с оплачено.
[p.s.]Предполагается, что формулы изменяются после ручного изменения какой-то из ячеек, типа какие-то флаги( 0-1) меняют.
К сообщению приложен файл: error.xlsm (17.3 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Пятница, 14.08.2015, 22:28
 
Ответить
Сообщение
дата так и стоит

У меня вроде все чистит кроме строк с оплачено.
[p.s.]Предполагается, что формулы изменяются после ручного изменения какой-то из ячеек, типа какие-то флаги( 0-1) меняют.

Автор - Udik
Дата добавления - 14.08.2015 в 22:20
Serge_007 Дата: Пятница, 14.08.2015, 22:25 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2750 ±
Замечаний: ±

Excel 2016
Под спойлер, если код не слишком большой, его засовывать не нужно.
И в любых других случаях тоже. Спойлер - для любого скрытого текста, и больше ни для чего


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Под спойлер, если код не слишком большой, его засовывать не нужно.
И в любых других случаях тоже. Спойлер - для любого скрытого текста, и больше ни для чего

Автор - Serge_007
Дата добавления - 14.08.2015 в 22:25
mlenar Дата: Суббота, 15.08.2015, 08:02 | Сообщение № 12
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
понял я уже, дорогие админы, один раз сказали - достаточно.
Все работает, Udik. Просто обновление строки дата происходит не сразу, а после другого события. Огромное спасибо, плюс тебе большой)
 
Ответить
Сообщениепонял я уже, дорогие админы, один раз сказали - достаточно.
Все работает, Udik. Просто обновление строки дата происходит не сразу, а после другого события. Огромное спасибо, плюс тебе большой)

Автор - mlenar
Дата добавления - 15.08.2015 в 08:02
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!