Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 点击单元格,通过链接图片显示数据范围_Excel_Vba - Fatal编程技术网

Excel 点击单元格,通过链接图片显示数据范围

Excel 点击单元格,通过链接图片显示数据范围,excel,vba,Excel,Vba,第一次发帖,希望这一切都有意义。我在excel中创建了一个显示88行的图形。在另一个工作表中,有一行数据记录了当在图形上单击某一行时,每一行上的内容我希望从另一个工作表中弹出相应的数据 我通过在每一行上制作一个透明的按钮/形状来隐藏和显示链接图像,从而实现了这一点。然而,我不得不为每行创建一个单独的按钮和宏,每行有100多行,这似乎效率很低。这是我使用的代码: Sub LINE1A1() With ActiveSheet.Shapes("Rectangle 9").TextFrame2

第一次发帖,希望这一切都有意义。我在excel中创建了一个显示88行的图形。在另一个工作表中,有一行数据记录了当在图形上单击某一行时,每一行上的内容我希望从另一个工作表中弹出相应的数据

我通过在每一行上制作一个透明的按钮/形状来隐藏和显示链接图像,从而实现了这一点。然而,我不得不为每行创建一个单独的按钮和宏,每行有100多行,这似乎效率很低。这是我使用的代码:

Sub LINE1A1()

    With ActiveSheet.Shapes("Rectangle 9").TextFrame2.TextRange.Characters
        If .Text = "Hide" Then
            .Text = "Show"
            ActiveSheet.Shapes("Picture 3").Visible = False
        Else
            .Text = "Hide"
            With ActiveSheet.Shapes("Rectangle 9")
                ActiveSheet.Shapes("Picture 3").Left = .Left + .Width
                ActiveSheet.Shapes("Picture 3").Top = .Top + .Height
                ActiveSheet.Shapes("Picture 3").Visible = True
            End With
        End If
    End With
End Sub

实现这一目标的更好方法是什么?侧面不使用链接图像作为数据,数据范围可能会发生变化,因为每行可能有超过1行的数据

您可以使用宏创建这些按钮或形状(如您所说,例如100个按钮),并使用宏移动它们,使它们位于正确的位置。它们将使用相同的宏。它会根据按钮的位置做不同的事情,或者根据它的名称做更好的事情

有一个很好的教程。

下面是一个简单的示例,其中一个公共子应用程序使用
Application.Caller
找出触发它的形状

Sub Tester()

    Dim s As Shape, c, s2 As Shape

    c = Application.Caller        '<< name of your clicked shape
    Debug.Print c

    Set s = ActiveSheet.Shapes(c) '<< the clicked shape

    With s.TextFrame2.TextRange.Characters

        'here you need some way to transform the name of the clicked
        '  shape to get the name of the other shape to be shown/hidden/moved
        Set s2 = ActiveSheet.Shapes(c & "_linked")

        s2.Visible = (.Text = "Show")
        .Text = IIf(.Text = "Show", "Hide", "Show") 'toggle text

    End With

End Sub
子测试仪()
尺寸s为形状,c为形状,s2为形状

c=Application.Caller'哪个项目是“矩形9”?我也没有在你的截图中看到任何显示/隐藏文本。要显示的行如何与单击的行相关?如果我们有更多的上下文,似乎有更好的方法来实现这一点。我的不好,因此有一个透明的矩形,文本与它所放置的单元格(线)的颜色相匹配,因此它实际上是不可见的。我将用更多的上下文来编辑主要的帖子。谢谢你的回复@TimWilliams