Уважаемы программисты!!! Как мне сделать, чтобы при проставлении слова "продлить" и числа в столбец F ( данные их столбцов L и M) в столбце G прописывался процент! А при слове списать сразу ставил 75%. Списать красным, продлить синим! Сейчас там есть макрос, но немного не то, что мне надо!!!! Благодарю заранее!!!!!
Уважаемы программисты!!! Как мне сделать, чтобы при проставлении слова "продлить" и числа в столбец F ( данные их столбцов L и M) в столбце G прописывался процент! А при слове списать сразу ставил 75%. Списать красным, продлить синим! Сейчас там есть макрос, но немного не то, что мне надо!!!! Благодарю заранее!!!!!ekut
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("E:F")) Is Nothing Then Dim FoundCell As Range Application.EnableEvents = False If Target.Column = 5 And Target = "списать" Then Target.Offset(, 2) = "75%" Exit Sub Else If Target.Column = 6 And Target.Offset(, -1) = "продлить" Then Set FoundCell = Columns("L").Find(Target, , xlValues, xlWhole) If Not FoundCell Is Nothing Then Target.Offset(, 1) = FoundCell.Offset(, 1) Else MsgBox "В столбце L нет значения: " & Target Target.Offset(, 1) = "" End If End If End If Application.EnableEvents = True End If End Sub
[/vba]
Попробуйте так [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("E:F")) Is Nothing Then Dim FoundCell As Range Application.EnableEvents = False If Target.Column = 5 And Target = "списать" Then Target.Offset(, 2) = "75%" Exit Sub Else If Target.Column = 6 And Target.Offset(, -1) = "продлить" Then Set FoundCell = Columns("L").Find(Target, , xlValues, xlWhole) If Not FoundCell Is Nothing Then Target.Offset(, 1) = FoundCell.Offset(, 1) Else MsgBox "В столбце L нет значения: " & Target Target.Offset(, 1) = "" End If End If End If Application.EnableEvents = True End If End Sub
Application.EnableEvents = False - взяли Application.EnableEvents = True - положили назад А когда вышли после "списать" - не положили! Но это конечно косяк Кузмича...
Application.EnableEvents = False - взяли Application.EnableEvents = True - положили назад А когда вышли после "списать" - не положили! Но это конечно косяк Кузмича...Hugo
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("E:E")) Is Nothing Then Application.EnableEvents = False Dim FoundCell As Range If Target = "списать" Then Target.Offset(, 1) = "" Target.Offset(, 2) = "75%" Target.Font.ColorIndex = 3 Target.Offset(, 2).Font.ColorIndex = 3 Application.EnableEvents = True Exit Sub Else If Target = "продлить" Then Target.Offset(, 1) = Application.InputBox("Введите количество", Type:=1) Set FoundCell = Columns("L").Find(Target.Offset(, 1), , xlValues, xlWhole) If Not FoundCell Is Nothing Then Target.Offset(, 2) = FoundCell.Offset(, 1) Target.Font.ColorIndex = 5 Target.Offset(, 1).Font.ColorIndex = 5 Target.Offset(, 2).Font.ColorIndex = 5 Else MsgBox "В столбце L нет значения: " & Target.Offset(, 1) Target.Offset(, 1) = "" Target.Offset(, 2) = "" End If End If End If End If Application.EnableEvents = True End Sub
[/vba]
Вот так переделал [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("E:E")) Is Nothing Then Application.EnableEvents = False Dim FoundCell As Range If Target = "списать" Then Target.Offset(, 1) = "" Target.Offset(, 2) = "75%" Target.Font.ColorIndex = 3 Target.Offset(, 2).Font.ColorIndex = 3 Application.EnableEvents = True Exit Sub Else If Target = "продлить" Then Target.Offset(, 1) = Application.InputBox("Введите количество", Type:=1) Set FoundCell = Columns("L").Find(Target.Offset(, 1), , xlValues, xlWhole) If Not FoundCell Is Nothing Then Target.Offset(, 2) = FoundCell.Offset(, 1) Target.Font.ColorIndex = 5 Target.Offset(, 1).Font.ColorIndex = 5 Target.Offset(, 2).Font.ColorIndex = 5 Else MsgBox "В столбце L нет значения: " & Target.Offset(, 1) Target.Offset(, 1) = "" Target.Offset(, 2) = "" End If End If End If End If Application.EnableEvents = True End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim FoundCell As Range, Cell As Range If Not Intersect(Target, Range("E:E")) Is Nothing Then Application.EnableEvents = False For Each Cell In Intersect(Target, Range("E:E")) With Cell If .Value = "списать" Then .Offset(, 1) = "" .Offset(, 2) = "75%" .Font.ColorIndex = 3 .Offset(, 2).Font.ColorIndex = 3 ElseIf .Value = "продлить" Then .Offset(, 1) = Application.InputBox("Введите количество", Type:=1) Set FoundCell = Columns("L").Find(.Offset(, 1), , xlValues, xlWhole) If Not FoundCell Is Nothing Then .Offset(, 2) = FoundCell.Offset(, 1) .Resize(, 3).Font.ColorIndex = 5 Else MsgBox "В столбце L нет значения: " & .Offset(, 1) .Offset(, 1).Resize(, 2) = "" End If End If End With Next Application.EnableEvents = True End If End Sub
[/vba]
Чуток косметики [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim FoundCell As Range, Cell As Range If Not Intersect(Target, Range("E:E")) Is Nothing Then Application.EnableEvents = False For Each Cell In Intersect(Target, Range("E:E")) With Cell If .Value = "списать" Then .Offset(, 1) = "" .Offset(, 2) = "75%" .Font.ColorIndex = 3 .Offset(, 2).Font.ColorIndex = 3 ElseIf .Value = "продлить" Then .Offset(, 1) = Application.InputBox("Введите количество", Type:=1) Set FoundCell = Columns("L").Find(.Offset(, 1), , xlValues, xlWhole) If Not FoundCell Is Nothing Then .Offset(, 2) = FoundCell.Offset(, 1) .Resize(, 3).Font.ColorIndex = 5 Else MsgBox "В столбце L нет значения: " & .Offset(, 1) .Offset(, 1).Resize(, 2) = "" End If End If End With Next Application.EnableEvents = True End If End Sub
RAN, так только косметику правил, логику не трогал , ну разве что добавил обработку на случай копи пэста нескольких значений. . Тыж знаешь, не люблю я VBA
RAN, так только косметику правил, логику не трогал , ну разве что добавил обработку на случай копи пэста нескольких значений. . Тыж знаешь, не люблю я VBA bmv98rus
Замечательный Временно просто медведь , процентов на 20.