Изображения Excel будут отображаться на основе значения ячейки - PullRequest
1 голос
/ 11 июня 2019

У меня есть 2 листа Excel, один называется Raw, а другой - Graphs. То, что я хочу сделать, это иметь несколько ячеек в Raw, и если они = TRUE, тогда я хочу, чтобы фигура появилась на странице графиков.

Я довольно новичок в VBA, поэтому я много не пробовал: (

Private Sub Worksheet_Calculate()
    With Worksheets("Graph")
        If Me.Range("FK45").Value = True Then
            .Shapes("Test1").Visible = True
            Exit Sub
        ElseIf Me.Range("FK45").Value = False Then
            .Shapes("Test1").Visible = False
            Exit Sub
        End If
    End With
End Sub

Я могу заставить это работать, поэтому, если FK45 - ИСТИНА, изображение показывает, но если FK45 - ЛОЖЬ, то нет, но то, что я хочу сделать, это добавить больше к этому, например,

Private Sub Worksheet_Calculate()
    With Worksheets("Graph")
        If Me.Range("FK45").Value = True Then
            .Shapes("Test1").Visible = True
            Exit Sub
        ElseIf Me.Range("FK45").Value = False Then
            .Shapes("Test1").Visible = False
            Exit Sub
        End If
    End With
    With Worksheets("Graph")
        If Me.Range("FK46").Value = True Then
            .Shapes("Test2").Visible = True
            Exit Sub
        ElseIf Me.Range("FK46").Value = False Then
            .Shapes("Test2").Visible = False
            Exit Sub
        End If
    End With
End Sub

Я хочу, чтобы все они были независимы друг от друга и могли добавлять больше при необходимости

Если FK45 равен TRUE, изображение1 показывает Если FK45 - ЛОЖЬ, изображение 1 не отображается и / или Если FK46 TRUE, изображение 2 показывает Если FK46 ЛОЖНО Изображение2 не отображается и / или Если FK47 TRUE, изображение 3 показывает Если FK47 - ЛОЖЬ, изображение 3 не отображается

и так далее ...

1 Ответ

0 голосов
/ 11 июня 2019

Вот как бы я это сделал

В VB Editor найдите ваши Worksheet и Shape объекты и переименуйте их системное имя в интуитивно понятное в соответствующих окнах свойств..

Worksheet object property window

Таким образом, вы можете избавиться от конструкции With Worksheets("Graph"), вместо этого вы можете вызывать их по системному имени, например:With Graph.Это также пригодится, если вы хотите переименовать свои рабочие листы или фигуры.

Обратите внимание, что вы Exit Sub после каждой проверки ячейки, ваша процедура останавливается после первой ячейки и не продолжаетсядальше

Вместо Worksheet.Calculate Событие, которое я советую использовать Worksheet.Change .Таким образом, вы можете перебирать свои ячейки одну за другой.

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rngCell As Range
    Dim shpImage As Shape

    For Each rngCell In Target.Cells
        ' check if change was made in "FK"
        If Not Intersect(rngCell, Me.Columns("FK")) Is Nothing Then
            Select Case rngCell.Row
                Case 45: Set shpImage = Graph.MyImage_1
                Case 46: Set shpImage = Graph.MyImage_2
            End Select
            ' if only boolean values present, no need for IF construction
            shpImage.Visible = rngCell.Value : Set shpImage = Nothing
        End If
    Next

End Sub

Если бы у вас был отдельный столбец для имени изображения, это было бы намного проще, вы можете проверить вот так (например, имена фигур расположены в "FL "колонка)

Graph.Shapes(rngCell.Offset(0, 1).Value).Visible = rngCell.Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...