Добрый день! Подобная тема была, но здесь суть немного другая. Необходимо сделать N-ое количество блоков кода с изменением ссылки на ячейку и фигуру. На примере расписан код из двух блоков. Работает всегда тот, что оказывается сверху. В чем ошибка не пойму.
[vba]
Код
Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("H3")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) Then If Target.Value > 0 Then Worksheets("Основная").Shapes("СтрОтправлено").Fill.ForeColor.RGB = RGB(0, 176, 80) Worksheets("Основная").Shapes("ТекстОтправлено").TextFrame.Characters.Font.Color = RGB(0, 176, 80) ElseIf Target.Value = 0 Then Worksheets("Основная").Shapes("СтрОтправлено").Fill.ForeColor.RGB = RGB(0, 176, 240) Worksheets("Основная").Shapes("ТекстОтправлено").TextFrame.Characters.Font.Color = RGB(0, 176, 240) ElseIf Target.Value < 0 Then Worksheets("Основная").Shapes("СтрОтправлено").Fill.ForeColor.RGB = RGB(192, 0, 0) Worksheets("Основная").Shapes("ТекстОтправлено").TextFrame.Characters.Font.Color = RGB(192, 0, 0) End If End If
If Intersect(Target, Range("E3")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) Then If Target.Value > 0 Then Worksheets("Основная").Shapes("СтрПрибыло").Fill.ForeColor.RGB = RGB(0, 176, 80) Worksheets("Основная").Shapes("ТекстПрибыло").TextFrame.Characters.Font.Color = RGB(0, 176, 80) ElseIf Target.Value = 0 Then Worksheets("Основная").Shapes("СтрПрибыло").Fill.ForeColor.RGB = RGB(0, 176, 240) Worksheets("Основная").Shapes("ТекстПрибыло").TextFrame.Characters.Font.Color = RGB(0, 176, 240) ElseIf Target.Value < 0 Then Worksheets("Основная").Shapes("СтрПрибыло").Fill.ForeColor.RGB = RGB(192, 0, 0) Worksheets("Основная").Shapes("ТекстПрибыло").TextFrame.Characters.Font.Color = RGB(192, 0, 0) End If End If
End Sub
[/vba]
Добрый день! Подобная тема была, но здесь суть немного другая. Необходимо сделать N-ое количество блоков кода с изменением ссылки на ячейку и фигуру. На примере расписан код из двух блоков. Работает всегда тот, что оказывается сверху. В чем ошибка не пойму.
[vba]
Код
Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("H3")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) Then If Target.Value > 0 Then Worksheets("Основная").Shapes("СтрОтправлено").Fill.ForeColor.RGB = RGB(0, 176, 80) Worksheets("Основная").Shapes("ТекстОтправлено").TextFrame.Characters.Font.Color = RGB(0, 176, 80) ElseIf Target.Value = 0 Then Worksheets("Основная").Shapes("СтрОтправлено").Fill.ForeColor.RGB = RGB(0, 176, 240) Worksheets("Основная").Shapes("ТекстОтправлено").TextFrame.Characters.Font.Color = RGB(0, 176, 240) ElseIf Target.Value < 0 Then Worksheets("Основная").Shapes("СтрОтправлено").Fill.ForeColor.RGB = RGB(192, 0, 0) Worksheets("Основная").Shapes("ТекстОтправлено").TextFrame.Characters.Font.Color = RGB(192, 0, 0) End If End If
If Intersect(Target, Range("E3")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) Then If Target.Value > 0 Then Worksheets("Основная").Shapes("СтрПрибыло").Fill.ForeColor.RGB = RGB(0, 176, 80) Worksheets("Основная").Shapes("ТекстПрибыло").TextFrame.Characters.Font.Color = RGB(0, 176, 80) ElseIf Target.Value = 0 Then Worksheets("Основная").Shapes("СтрПрибыло").Fill.ForeColor.RGB = RGB(0, 176, 240) Worksheets("Основная").Shapes("ТекстПрибыло").TextFrame.Characters.Font.Color = RGB(0, 176, 240) ElseIf Target.Value < 0 Then Worksheets("Основная").Shapes("СтрПрибыло").Fill.ForeColor.RGB = RGB(192, 0, 0) Worksheets("Основная").Shapes("ТекстПрибыло").TextFrame.Characters.Font.Color = RGB(192, 0, 0) End If End If
- Прочитайте Правила форума - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь) - Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 100кб согласно п.3 Правил форума
- Прочитайте Правила форума - Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь) - Приложите файл с исходными данными и желаемым результатом (можно вручную) в формате Excel размером до 100кб согласно п.3 Правил форума_Boroda_
Нужно не только убрать, но и добавить))) Например через Select адрес проверить [vba]
Код
Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address(0, 0) Case "H3" 'If Intersect(Target, Range("H3")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) Then If Target.Value > 0 Then Worksheets("Основная").Shapes("СтрОтправлено").Fill.ForeColor.RGB = RGB(0, 176, 80) Worksheets("Основная").Shapes("ТекстОтправлено").TextFrame.Characters.Font.Color = RGB(0, 176, 80) ElseIf Target.Value = 0 Then Worksheets("Основная").Shapes("СтрОтправлено").Fill.ForeColor.RGB = RGB(0, 176, 240) Worksheets("Основная").Shapes("ТекстОтправлено").TextFrame.Characters.Font.Color = RGB(0, 176, 240) ElseIf Target.Value < 0 Then Worksheets("Основная").Shapes("СтрОтправлено").Fill.ForeColor.RGB = RGB(192, 0, 0) Worksheets("Основная").Shapes("ТекстОтправлено").TextFrame.Characters.Font.Color = RGB(192, 0, 0) End If End If Case "E3" 'If Intersect(Target, Range("E3")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) Then If Target.Value > 0 Then Worksheets("Основная").Shapes("СтрПрибыло").Fill.ForeColor.RGB = RGB(0, 176, 80) Worksheets("Основная").Shapes("ТекстПрибыло").TextFrame.Characters.Font.Color = RGB(0, 176, 80) ElseIf Target.Value = 0 Then Worksheets("Основная").Shapes("СтрПрибыло").Fill.ForeColor.RGB = RGB(0, 176, 240) Worksheets("Основная").Shapes("ТекстПрибыло").TextFrame.Characters.Font.Color = RGB(0, 176, 240) ElseIf Target.Value < 0 Then Worksheets("Основная").Shapes("СтрПрибыло").Fill.ForeColor.RGB = RGB(192, 0, 0) Worksheets("Основная").Shapes("ТекстПрибыло").TextFrame.Characters.Font.Color = RGB(192, 0, 0) End If End If End Select End Sub
Нужно не только убрать, но и добавить))) Например через Select адрес проверить [vba]
Код
Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address(0, 0) Case "H3" 'If Intersect(Target, Range("H3")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) Then If Target.Value > 0 Then Worksheets("Основная").Shapes("СтрОтправлено").Fill.ForeColor.RGB = RGB(0, 176, 80) Worksheets("Основная").Shapes("ТекстОтправлено").TextFrame.Characters.Font.Color = RGB(0, 176, 80) ElseIf Target.Value = 0 Then Worksheets("Основная").Shapes("СтрОтправлено").Fill.ForeColor.RGB = RGB(0, 176, 240) Worksheets("Основная").Shapes("ТекстОтправлено").TextFrame.Characters.Font.Color = RGB(0, 176, 240) ElseIf Target.Value < 0 Then Worksheets("Основная").Shapes("СтрОтправлено").Fill.ForeColor.RGB = RGB(192, 0, 0) Worksheets("Основная").Shapes("ТекстОтправлено").TextFrame.Characters.Font.Color = RGB(192, 0, 0) End If End If Case "E3" 'If Intersect(Target, Range("E3")) Is Nothing Then Exit Sub If IsNumeric(Target.Value) Then If Target.Value > 0 Then Worksheets("Основная").Shapes("СтрПрибыло").Fill.ForeColor.RGB = RGB(0, 176, 80) Worksheets("Основная").Shapes("ТекстПрибыло").TextFrame.Characters.Font.Color = RGB(0, 176, 80) ElseIf Target.Value = 0 Then Worksheets("Основная").Shapes("СтрПрибыло").Fill.ForeColor.RGB = RGB(0, 176, 240) Worksheets("Основная").Shapes("ТекстПрибыло").TextFrame.Characters.Font.Color = RGB(0, 176, 240) ElseIf Target.Value < 0 Then Worksheets("Основная").Shapes("СтрПрибыло").Fill.ForeColor.RGB = RGB(192, 0, 0) Worksheets("Основная").Shapes("ТекстПрибыло").TextFrame.Characters.Font.Color = RGB(192, 0, 0) End If End If End Select End Sub
Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address(0, 0) Case "H3" Set shp_1 = ActiveSheet.Shapes("СтрОтправлено") Set shp_2 = ActiveSheet.Shapes("ТекстОтправлено") Case "E3" Set shp_1 = ActiveSheet.Shapes("СтрПрибыло") Set shp_2 = ActiveSheet.Shapes("ТекстПрибыло") Case Else Exit Sub End Select
If IsNumeric(Target.Value) Then Select Case Target.Value Case Is > 0 color_ = RGB(0, 176, 80) Case Is = 0 color_ = RGB(0, 176, 240) Case Is < 0 color_ = RGB(192, 0, 0) End Select
shp_1.Fill.ForeColor.RGB = color_ shp_2.TextFrame.Characters.Font.Color = color_ End If End Sub
[/vba]
Пожалуйста! Я немного оптимизировал код. [vba]
Код
Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address(0, 0) Case "H3" Set shp_1 = ActiveSheet.Shapes("СтрОтправлено") Set shp_2 = ActiveSheet.Shapes("ТекстОтправлено") Case "E3" Set shp_1 = ActiveSheet.Shapes("СтрПрибыло") Set shp_2 = ActiveSheet.Shapes("ТекстПрибыло") Case Else Exit Sub End Select
If IsNumeric(Target.Value) Then Select Case Target.Value Case Is > 0 color_ = RGB(0, 176, 80) Case Is = 0 color_ = RGB(0, 176, 240) Case Is < 0 color_ = RGB(192, 0, 0) End Select
shp_1.Fill.ForeColor.RGB = color_ shp_2.TextFrame.Characters.Font.Color = color_ End If End Sub
Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address(0, 0) Case "H3" Set shp_1 = ActiveSheet.Shapes("СтрОтправлено") Set shp_2 = ActiveSheet.Shapes("ТекстОтправлено")
[/vba]
А есть ли возможность проверять ячейку другого листа? Это надо адрес в Case поменять?
[vba]
Код
Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address(0, 0) Case "H3" Set shp_1 = ActiveSheet.Shapes("СтрОтправлено") Set shp_2 = ActiveSheet.Shapes("ТекстОтправлено")
[/vba]
А есть ли возможность проверять ячейку другого листа? Это надо адрес в Case поменять?kotlovan
Сообщение отредактировал kotlovan - Четверг, 20.06.2019, 11:06