Excel图像根据单元格值显示

时间:2019-06-11 10:52:01

标签: excel vba

我在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为TRUE,则图像显示,但如果FK45为FALSE,则图像不显示,但是我想做的就是为此添加更多内容。

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,则Image1显示 如果FK45为FALSE,则不会显示Image1 和/或 如果FK46为TRUE,则Image2显示 如果FK46为FALSE,则Image2不显示 和/或 如果FK47为TRUE,则Image3显示 如果FK47为FALSE,则Image3不显示

以此类推...

1 个答案:

答案 0 :(得分:0)

这就是我会做的

在VB编辑器中找到您的 Worksheet Shape 对象,然后在各自的属性窗口中将其系统名称重命名为直观的名称。

Worksheet object property window

通过这种方法,您可以摆脱 With Worksheets("Graph") 的构造,而可以通过其系统名称(如 With Graph )来调用它们。如果您想重命名工作表或形状,这也将派上用场。

请注意,您在每次单元格检查后 Exit Sub ,您的过程在第一个单元格后停止,并且不再继续进行。

我建议使用 Worksheet.Change 代替 Worksheet.Calculate 事件。这样,您就可以一次又一次地遍历单元格。

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