我希望在用户窗体上的Image控件中查看工作表中的图像。
此图像将根据组合框上的值更改。我已将(使用:插入 - >图片)一些图像插入到我的工作簿的“Sheet1”中,并将其命名为“Picture1”& “图片2”。
我创建了以下UserForm:
Form http://im56.gulfup.com/msKyqi.png
这是我尝试使用的代码,以便从工作表中加载图像,但不幸的是,目前这不起作用。
Private Sub ComboBox1_Change()
UserForm1.Image1.Picture = LoadPicture(Worksheets("Sheet1").Shapes(ComboBox1.Value))
End Sub
Private Sub UserForm_Initialize()
UserForm1.ComboBox1.Clear
UserForm1.ComboBox1.AddItem "Picture1"
UserForm1.ComboBox1.AddItem "Picture2"
UserForm1.ComboBox1.Value = "Picture1"
UserForm1.Image1.Picture = LoadPicture(Worksheets("Sheet1").Shapes(ComboBox1.Value))
End Sub
每次运行此代码时,都会出现以下错误:
Error http://im43.gulfup.com/YoWvTp.png
请告知。
答案 0 :(得分:7)
我明白了!
当我使用UserForm时,有一个问题的解决方法。
而不是让工作表中的图像然后尝试在我尝试在UserForm中首先使用它们的形式加载它们,这里是如何。
在您的用户表单上创建一个框架: Frame http://im88.gulfup.com/Moy8I6.png
将框架的visible属性设置为“ False ”: Visible http://im88.gulfup.com/sAIQqh.png
通过添加图片控件插入图像并加载图像,您可以根据需要添加任意数量的图像: Images http://im88.gulfup.com/oas0EQ.png
为图片命名: Name http://im88.gulfup.com/cIO317.png
将所有图像一个拖到另一个框架中(然后可以将框架移动到一个角落,这样就不会打扰你了:
Drag http://im88.gulfup.com/1fOSut.png Move Away http://im88.gulfup.com/Q1fzKd.png
接下来创建一个图片控件,这将用于根据选择显示图片:
Form View http://im88.gulfup.com/X1UVRB.png
在这个例子中,我将使用组合框进行选择。现在将以下代码插入到非常简单的表单中:
Private Sub ComboBox1_Change()
' Image1 is the name of the created picture control
UserForm3.Controls.Item("Image1").Picture = UserForm3.Controls.Item(UserForm3.ComboBox1.Value).Picture
End Sub
Private Sub UserForm_Initialize()
UserForm3.ComboBox1.AddItem "Argentina"
UserForm3.ComboBox1.AddItem "Brazil"
UserForm3.ComboBox1.AddItem "Chile"
End Sub
正如您将看到的,带有图片的框架是隐藏的,并且图片控件内部的图像会根据选择进行更改:
Result http://im88.gulfup.com/MSqyHF.png
我认为这是更好的方法,而不是将图像从工作表导出到Temp文件夹,然后将它们加载回图片控件。
答案 1 :(得分:3)
LoadImage()函数需要一个文件名(可以使用驱动器号和路径完全限定)。你得到的类型不匹配,因为它需要一个字符串,你给它一个图像对象。
据我所知,没有简单的方法可以将当前应用程序中的图像放入图像控件中。我所知道的(hackish)解决方法是将图像导出到文件,然后使用LoadImage()导入同一个文件。
如果要嵌入动态更新为用户表单的图表,则必须使用相同的路径。您将图表导出为图像(例如,JPEG),然后使用LoadImage()将图像拉回图像控件。
答案 2 :(得分:0)
我知道这篇文章很古老,但是我在这里找到了自己的出路。我想出了一个稍微不同的解决方案。根据组合框的选择,我大约需要加载30张图片。首先,所有组合框选项(讨论“ XX”)都保存到单独的工作表中,该表对用户“非常隐藏”,并在激活用户表单时加载到组合框中。在用户窗体上添加了一个框架,在该框架中放置了30个完全重叠的图像框。每个图像框都被仔细命名为“ Img_XX”,其中XX是简单的两个字母的标识符。
使用此设置,现在可以遍历框架中的每个“控件”(图像框)并将其全部隐藏,但名称与组合框值匹配的控件除外。 Combobox_Change()函数中的userform模块中的代码如下所示:
Private Sub ComboBox_Change()
Dim SearchValue as String
SearchValue = me.Combobox.value
Dim Ctrl as Control
For each Ctrl in Me.TestFrame.Controls
If Ctrl.Name Like "img_" & SearchValue Then
Ctrl.visible = True
else
Ctrl.Visible = False
End If
next Ctrl
End Sub
我希望这会有所帮助,让我知道您的想法。 :)