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]Для кода есть кнопка #. Под спойлер, если код не слишком большой, его засовывать не нужно. Поправил Вам. И приложите файл.
Имеется вот такой код: [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
Сообщение отредактировал _Boroda_ - Пятница, 14.08.2015, 11:53
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]
Маленькая фича - пока в связанной ячейке стоит "оплачено", сделать ячейку с датой пустой не выйдет - опять вставится текущая.
Ну так можно [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
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
Сообщение отредактировал Udik - Пятница, 14.08.2015, 13:52
да. то есть дата должна стоять ТОЛЬКО в том случае, если в очейке столбца О стоит слово "оплачено". во всех иных случаях ячейка должна быть пустой
да. то есть дата должна стоять ТОЛЬКО в том случае, если в очейке столбца О стоит слово "оплачено". во всех иных случаях ячейка должна быть пустойmlenar
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] Сейчас проверяет на присутствие последовательности оплачено, т.е. оплачено+что-то_ещё тоже отловит.
Тогда так [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
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
Друг, нюанс такой. теперь если опустошаю ячейку столбца О, то дата исчезает, все ок. А когда при помощи формулы там появляется слово "долг", то почему-то дата так и стоит. я так понимаю, остается лишь ручное опустошение?)
Друг, нюанс такой. теперь если опустошаю ячейку столбца О, то дата исчезает, все ок. А когда при помощи формулы там появляется слово "долг", то почему-то дата так и стоит. я так понимаю, остается лишь ручное опустошение?)mlenar
Сообщение отредактировал mlenar - Пятница, 14.08.2015, 16:28
У меня вроде все чистит кроме строк с оплачено. [p.s.]Предполагается, что формулы изменяются после ручного изменения какой-то из ячеек, типа какие-то флаги( 0-1) меняют.
У меня вроде все чистит кроме строк с оплачено. [p.s.]Предполагается, что формулы изменяются после ручного изменения какой-то из ячеек, типа какие-то флаги( 0-1) меняют.Udik
понял я уже, дорогие админы, один раз сказали - достаточно. Все работает, Udik. Просто обновление строки дата происходит не сразу, а после другого события. Огромное спасибо, плюс тебе большой)
понял я уже, дорогие админы, один раз сказали - достаточно. Все работает, Udik. Просто обновление строки дата происходит не сразу, а после другого события. Огромное спасибо, плюс тебе большой)mlenar