在VBA中创建一个命令按钮并更改它的名称&字幕?

时间:2017-06-13 07:00:46

标签: excel vba excel-vba shape commandbutton

我在VBA宏中看到了很多关于创建形状和按钮的不同页面,但它们都没有用,我感到非常沮丧。

我试图使用:

 Dim sortBtn As Object
    Set sortBtn = Worksheets("Main").OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
      Link:=False, DisplayAsIcon:=False, Left:=200, Top:=100, Width:= 100, Height:=35)
    sortBtn.Name = "Test"     'So far this works
    Worksheets("Main").Shapes(Test).DrawingObject.Object.Caption = "Test2"
    'The above line doesn't work

请不要将我重定向到另一个问题,我已经在这个网站上阅读了十几个,没有人比这更进一步帮助我了。有了这个,我还想选择按钮的放置位置。我也试过了形状方法:

Dim sortBtn As Shape
Set sortBtn = Worksheets("Main").Shapes.AppShape(CommandButton1)

我也尝试过:

With sortBtn.OLEFormat.Object
    .Object.Caption = "Test"
    .Name = "Test"
End With

以上也不适用于上面使用的声明。

请救我排除故障!

2 个答案:

答案 0 :(得分:0)

这个答案也许为时已晚,但我使用以下代码存档了预期的结果:

Call Add_Command_Button(Range("R39:S40"), "Next01_Button", "Next")

Sub Add_Command_Button(rngUbicacionControl As Range, sCommandButtonName As String, sCommandButtonCaption As String)
    Dim objCommandButton As Object
    Set objCommandButton = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
        Link:=False, _
        DisplayAsIcon:=False, _
        left:=rngUbicacionControl.left, _
        top:=rngUbicacionControl.top, _
        width:=rngUbicacionControl.width, _
        height:=rngUbicacionControl.height)
    objCommandButton.Name = sCommandButtonName
    objCommandButton.Object.Caption = sCommandButtonCaption
End Sub

答案 1 :(得分:0)

使用集成的Macro Recorder,似乎您可以通过另一种方法解决此问题。

这是完整的宏

Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveSheet.Buttons.Add(111.75, 60.75, 258, 75.75).Select
    Selection.OnAction = "WhatEverMacroYouNeedtoRunWhenYouClickOnThisButton"
    Selection.Characters.Text = "Test 2"
    With Selection.Characters(Start:=1, Length:=13).Font
        .Name = "Calibri"
        .FontStyle = "Regular"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 1
    End With
End Sub

如果看这段代码,您会发现它实际上不是同一类型的对象。您的是OLEobject,这个是Button。但是,我很难找到有关该对象的文档...因此,如果此类对象对于您的应用程序是否足够,我无法真正说出要做什么。

因此,如果我们将其应用于您的代码,则会得到:

Public Sub InsertButton()

    Dim sortBtn As Object
    Set sortBtn = ThisWorkbook.Worksheets("Main").Buttons.Add(Left:=200, _
        Top:=100, Width:=100, Height:=35)

    sortBtn.Name = "Test"
    sortBtn.Caption = "Test 2"  '<---This one works.
    sortBtn.Characters.Text = sortBtn.Characters.Text & vbCrLf & "Test 3" <-- This one works too!

End Sub

This is the final result