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通过单击形状更改形状的背景图像的主要内容,如果未能解决你的问题,请参考以下文章