Excel VBA通​​过单击形状更改形状的背景图像

Posted

技术标签:

【中文标题】Excel VBA通​​过单击形状更改形状的背景图像【英文标题】:Excel VBA to change background image of shape by clicking on shape 【发布时间】:2019-12-20 07:15:44 【问题描述】:

第一次发布一些帮助,我在详尽搜索后找不到。我敢肯定,对于知道自己在做什么的人来说,这很容易。

我正在寻找 VBA,它可以通过单击形状在形状内循环显示背景图像(保存在我的计算机上)。我在下面粘贴了 2 组代码,我发现这给了我一个良好的开端,但我不知道如何合并代码以获得我正在寻找的结果。

最终,我希望每次单击一个形状时都可以循环执行以下命令:

    初始形状:透明背景 单击形状:透明背景替换为 BackgroundImage1 再次单击形状:BackgroundImage1 替换为 BackgroundImage2 再次单击形状:BackgroundImage2 替换为透明背景

我发现这段代码可以很好地通过点击来改变形状的颜色:

Sub trafficlight()
Dim WhoAmI As String, sh As Shape
    WhoAmI = Application.Caller
    With ActiveSheet.Shapes(WhoAmI).Fill.ForeColor
        Select Case .RGB
            Case vbRed
                .RGB = vbGreen
            Case vbGreen
                .RGB = vbYellow
            Case Else
                .RGB = vbRed
        End Select
    End With
End Sub

然后这段代码用我电脑上保存的图像更改形状:

Sub Rectangle9_Click()
Dim WhoAmI As String, sh As Shape
    WhoAmI = Application.Caller
    With ActiveSheet.Shapes(WhoAmI).Fill
        .Visible = msoTrue
        .UserPicture "C:\Users\username\Desktop\BackgroundImage1.png"
        .TextureTile = msoFalse
    End With
End Sub

希望这很容易理解。提前感谢您的帮助!!!

【问题讨论】:

欢迎来到 SO。所以基本上你找到了一些你想要的代码,你希望有人将它们组合起来,但你不想做任何努力,因为实际上你还没有发布任何关于如何组合它们的尝试。 SO不是免费的编码服务。 我已经为此工作了一段时间,但没有运气。我希望能得到一些帮助,让我朝着正确的方向前进,但我想在这个网站上寻求帮助是错误的。我会继续在其他地方挖掘。 【参考方案1】:

您需要跟踪当前显示的图像。每次图像更改时,您都可以设置integer

Option Explicit

Sub ChangeShapePic()
Static i As Integer

With ActiveSheet.Shapes(Application.Caller).Fill
    Select Case i
        Case 0
            .UserPicture ("C:\Users\username\Desktop\BackgroundImage1.png")
            i = 1
        Case 1
            .UserPicture ("C:\Users\username\Desktop\BackgroundImage2.png")
            i = 2
        Case 2
            .UserPicture ("C:\Users\username\Desktop\BackgroundImage3.png")
            i = 3
        Case 3
           .Solid
           .Transparency = 0#
            i = 0
    End Select
End With
End Sub

【讨论】:

您不需要 workbook.open。当你暗淡一个整数时,它被设置为零。或者,您可以在过程中声明一个静态变量,而不是全局 是的,你是对的。愚蠢的我没有看到......我将编辑我的答案。 @HarassedDad 非常感谢!最初我遇到了一些麻烦,因为形状填充了白色而不是透明,但我替换了: .Transparency = 1# 并且它似乎修复了它。你让我摆脱困境!

以上是关于Excel VBA通​​过单击形状更改形状的背景图像的主要内容,如果未能解决你的问题,请参考以下文章

怎样用EXCEL做树状图?

单击后更改形状和颜色(GUI、Java)

我在 excel VBA 中有一个函数,它使用文本框从用户那里获取输入

Excel VBA:获取单击按钮的行[重复]

Visio高级应用部件

Android:我画了很多形状。每当我单击它时,我都需要更改形状的颜色