Я создал следующий скрипт для отображения разноцветных фигур на основе числа, когда обновляется запрос данных, и он работает, но когда я выключаю вкладку или открываю другую книгу, он выдает ошибку при обновлении, говоря, что объект не найден, и выделяет следующую строку:

ActiveSheet.Shapes("TextBox 16").TextFrame.Characters.Font.ColorIndex = 1

Я подумал, что это из-за ссылки "ActiveSheet", поэтому я заменил его на фактическое имя рабочего листа, и оно все еще работает, но все равно выдает ошибку.

Worksheets("Outbound").Shapes("TextBox 16").TextFrame.Characters.Font.ColorIndex = 1

Что я здесь не так делаю? Кроме того, если вы видите какой-либо код, который можно упростить, мои навыки работы с VBS не самые лучшие. Код выглядит следующим образом:

Private Sub Worksheet_Calculate()
Dim Xrg As Range, Yrg As Range

Set Xrg = Range("K31")
Set Yrg = Range("K32")

For Each aCell In Xrg
    If Not Intersect(Xrg, Range("K31")) Is Nothing Then
        If Range("K31").Value = 0 Then
            If Rows("25:25").EntireRow.Hidden = False Then
            Rows("25:25").EntireRow.Hidden = True
            End If
            ElseIf Range("K31").Value <> 0 Then
            If Rows("25:25").EntireRow.Hidden = True Then
            Rows("25:25").EntireRow.Hidden = False
            End If
        End If
    End If
Next
For Each aCell In Yrg
    If Range("K32").Value < 55 Then
    Worksheets("Outbound").Shapes("TextBox 16").TextFrame.Characters.Font.ColorIndex = 2
    Worksheets("Outbound").Shapes("TextBox 43").TextFrame.Characters.Font.ColorIndex = 2
    Worksheets("Outbound").Shapes("Util 1").Visible = True
    Worksheets("Outbound").Shapes("Util 2").Visible = False
    Worksheets("Outbound").Shapes("Util 3").Visible = False
    Worksheets("Outbound").Shapes("Util 4").Visible = False
    Worksheets("Outbound").Shapes("Util 5").Visible = False
    End If
    If Range("K32").Value >= 55 And Range("K32").Value < 65 Then
    Worksheets("Outbound").Shapes("TextBox 16").TextFrame.Characters.Font.ColorIndex = 2
    Worksheets("Outbound").Shapes("TextBox 43").TextFrame.Characters.Font.ColorIndex = 2
    Worksheets("Outbound").Shapes("Util 1").Visible = False
    Worksheets("Outbound").Shapes("Util 2").Visible = True
    Worksheets("Outbound").Shapes("Util 3").Visible = False
    Worksheets("Outbound").Shapes("Util 4").Visible = False
    Worksheets("Outbound").Shapes("Util 5").Visible = False
    End If
    If Range("K32").Value >= 65 And Range("K32").Value < 75 Then
    Worksheets("Outbound").Shapes("TextBox 16").TextFrame.Characters.Font.ColorIndex = 1
    Worksheets("Outbound").Shapes("TextBox 43").TextFrame.Characters.Font.ColorIndex = 1
    Worksheets("Outbound").Shapes("Util 1").Visible = False
    Worksheets("Outbound").Shapes("Util 2").Visible = False
    Worksheets("Outbound").Shapes("Util 3").Visible = True
    Worksheets("Outbound").Shapes("Util 4").Visible = False
    Worksheets("Outbound").Shapes("Util 5").Visible = False
    End If
    If Range("K32").Value >= 75 And Range("K32").Value < 85 Then
    Worksheets("Outbound").Shapes("TextBox 16").TextFrame.Characters.Font.ColorIndex = 2
    Worksheets("Outbound").Shapes("TextBox 43").TextFrame.Characters.Font.ColorIndex = 2
    Worksheets("Outbound").Shapes("Util 1").Visible = False
    Worksheets("Outbound").Shapes("Util 2").Visible = False
    Worksheets("Outbound").Shapes("Util 3").Visible = False
    Worksheets("Outbound").Shapes("Util 4").Visible = True
    Worksheets("Outbound").Shapes("Util 5").Visible = False
    End If
    If Range("K32").Value >= 85 Then
    Worksheets("Outbound").Shapes("TextBox 16").TextFrame.Characters.Font.ColorIndex = 2
    Worksheets("Outbound").Shapes("TextBox 43").TextFrame.Characters.Font.ColorIndex = 2
    Worksheets("Outbound").Shapes("Util 1").Visible = False
    Worksheets("Outbound").Shapes("Util 2").Visible = False
    Worksheets("Outbound").Shapes("Util 3").Visible = False
    Worksheets("Outbound").Shapes("Util 4").Visible = False
    Worksheets("Outbound").Shapes("Util 5").Visible = True
    End If
Next
End Sub

1 ответ1

0

Одним из улучшений, которое вы можете внести в свой код, является замена операторов IF на SELECT CASE и предварительная инициализация форматирования, что облегчает просмотр изменений в каждом случае.

Worksheets("Outbound").Shapes("TextBox 16").TextFrame.Characters.Font.ColorIndex = 2
Worksheets("Outbound").Shapes("TextBox 43").TextFrame.Characters.Font.ColorIndex = 2
Worksheets("Outbound").Shapes("Util 1").Visible = False
Worksheets("Outbound").Shapes("Util 2").Visible = False
Worksheets("Outbound").Shapes("Util 3").Visible = False
Worksheets("Outbound").Shapes("Util 4").Visible = False
Worksheets("Outbound").Shapes("Util 5").Visible = False

Select Case Range("K32").Value
    Case Is < 55
       Worksheets("Outbound").Shapes("Util 1").Visible = True
    Case 55 To 64
       Worksheets("Outbound").Shapes("Util 2").Visible = True
    Case 65 to 74
       Worksheets("Outbound").Shapes("TextBox 16").TextFrame.Characters.Font.ColorIndex = 1
       Worksheets("Outbound").Shapes("TextBox 43").TextFrame.Characters.Font.ColorIndex = 1
       Worksheets("Outbound").Shapes("Util 3").Visible = True
    Case 75 to 84
       Worksheets("Outbound").Shapes("Util 4").Visible = True
    Case Is > 84
       Worksheets("Outbound").Shapes("Util 5").Visible = True
End Select

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .