如何以编程方式将图像添加到CommandButton /窗体按钮/图像控件

时间:2014-02-05 16:18:31

标签: excel vba

我对VBA很新,而且我一直在学习很多,主要来自像Stack Overflow这样的论坛。我一遍又一遍地搜索这个问题的解决方案,似乎找不到任何......我想要的是拥有一个代码,在执行时,会在第三列中插入一个“按钮”所选行的。例如,如果选择单元格“S83”,我想在单元格S3中出现“按钮”。我说的是“按钮”,因为它对我来说无关紧要,只要它是一个CommandButton或一个Form Button或一个Image Control(来自Form控件),只要它显示一个图像并在点击时执行一个动作。玩我从论坛和宏记录器获得的代码,我最终得到了两个不同的代码。第一个设法插入图片,但我无法弄清楚如何让它在点击时执行一个动作:

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

第二段代码插入一个Form 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

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

1 个答案:

答案 0 :(得分:-1)

您可以在工作表上放置两种类型的控件:表单控件和ActiveX控件。它们都可以在Excel前端的Developer功能区上找到。

{{3}}

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

ActiveX控件功能更强大 - 右键单击​​一个,单击“属性”,然后查看它支持的许多功能。

要回答您的第一个问题,如何将动作添加到您在第一个代码块中创建的OleObject:您在代码中创建的按钮是一个ActiveX控件。要查找其事件过程,请单击Developer功能区上的Design Mode按钮切换到Design Mode。现在,双击您的activeX按钮,Excel将直接转到该按钮的事件宏。该事件在代码隐藏工作表中可用。

在没有所有编程工作的情况下,将图像放在ActiveX控件上很容易。在Excel前端,在设计模式下,右键单击“ActiveX”按钮并选择“属性”。你会发现"图片"在那里的财产。

回答你的第二个问题:你的第二个例子是表格控制。表单控件是一种较旧的技术,非常简单。我很想知道如何将照片放在一张照片上:)

但是,您可以轻松地将宏指定给您直接在纸张上插入的任何图像 - 您只是不会得到花哨的“推进式”'你用按钮得到的动画。在“插入”功能区上,单击“图片”选择图片,然后单击“确定”。现在右键单击图片并选择"分配宏"。这正是您将宏指定给旧式表单控件的原因 - 同样,不需要代码来创建控件或为其指定宏。

这应该足以让你前进。