如何以编程方式将图像添加到CommandButton / Form Button / Image Control

我对VBA相当陌生,我从Stack Overflow这样的论坛中学到了很多东西。 我一遍又一遍地search这个问题的解决scheme,似乎无法find任何…我想要做的是有一个代码,当执行,将插入一个“button”的第三列选定的行。 例如,如果单元格“S83”被选中,我想要一个“button”出现在单元格S3中。 我说“button”,因为它是一个CommandButton或表单button或图像控件(从窗体控件)没关系,只要它显示一个图像,并单击时执行一个操作。 玩弄我从论坛和macros录像机得到的代码,我结束了两个不同的代码段。 第一个pipe理插入图片,但我不知道如何使其执行单击时的操作:

Sub AddImageControl() Dim t As Range Dim btn As OLEObject Set t = ActiveSheet.Cells(Selection.Row, 3) Set btn = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, _ DisplayAsIcon:=False, Left:=t.Left, Top:=t.Top, _ Width:=t.Width, Height:=t.Height With btn .Object.Picture = LoadPicture("C:\Users\dummy\Pictures\Task.jpg") .Object.PictureSizeMode = fmPictureSizeModeZoom .ShapeRange.Left = t.Left .ShapeRange.Top = t.Top .ShapeRange.Width = t.Width .ShapeRange.Height = t.Height End With End Sub 

第二块代码插入一个表单button,它允许我执行一个依赖于该button的行的操作(这将是非常赞赏的)。 但这一次,我不知道如何在button中插入图像:

 Sub AddFormsButton() Dim sShape As Shape Dim t As Range Set t = ActiveSheet.Cells(Selection.Row, 3) With t Set sShape = Sheet1.Shapes.AddFormControl _ (Type:=xlButtonControl, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height) End With With sShape .OnAction = "test" .TextFrame.Characters.Caption = "" End With End Sub Sub test() MsgBox "This button is in row " & ActiveSheet.Buttons(Application.Caller).TopLeftCell.Row + 1 End Sub 

如果有人能帮我解决这个问题,我真的很感激。 请注意,这些不是CommandBarbutton,也不是UserFormbutton,它们必须放在工作表中。 提前致谢。

有两种types的控件可以放在工作表上:表单控件和ActiveX控件。 它们都可以在Excel前端的开发人员function区中find。

开发者织带>插入

如果您没有看到“开发人员”function区,请右键单击function区,select“自定义function区”,然后在function区列表中选中“开发人员”。

ActiveX控件function更强大 – 右键单击​​一个,单击属性,并查看它支持的许多function。

要回答你的第一个问题,如何添加一个动作到你在第一个代码块中创build的OleObject:你在代码中创build的button是一个ActiveX控件。 要查找其事件过程,请通过单击开发人员function区上的devise模式button切换到devise模式。 现在,双击你的ActiveXbutton,Excel将直接进入该button的事件macros。 该事件在工作表后面的代码中可用。

在没有所有编程工作的情况下,将图像放在ActiveX控件上很容易。 在Excel前端,在devise模式下,右键单击ActiveXbutton并select属性。 你会在那里find“图片”属性。

要回答你的第二个问题:你的第二个例子是一个表单控件。 表单控件是一个较老的技术,非常简单。 我很想找出自己如何把图片放在一个:)

但是,您可以轻松地将macros指定给您直接在工作表上插入的任何图像 – 您将无法获得使用button获得的幻想“推入”animation。 在插入function区上,单击图片。 select你的图片,然后单击确定。 现在右键单击图片并select“分配macros”。 这正是你如何分配一个macros到老派表单控件 – 再次,不需要代码来创build控件或分配一个macros。

这应该足以让你走了。