2016-04-14 59 views
1

我有一个创建一个命令按钮,但我无法给出任何宏按钮的VBAVBA Excel 2010中 - 如何将宏指定到某个已作出了命令按钮宏

有宏看着this链接,但它的用户表单(但我不够好,能够改变它,以适应我所需要的)

我目前特林的代码是在下面,我猜我需要添加With声明,但我不知道它会是什么

Dim MyR As Range, MyB As OLEObject 
Dim MyR_T As Long, MyR_L As Long 


    Set MyR = Range("I3") 'just an example - you get that from your own script 
    MyR_T = MyR.Top   'capture positions 
    MyR_L = MyR.Left  '... 
    'create button 
    Set MyB = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _ 
    Link:=False, DisplayAsIcon:=False) 

    'set main button properties 
    With MyB 
     .Name = "MyPrecodedButton"   'important - code must exist ... see below 
     .Object.Caption = "Load UseForm" 
     .Top = MyR_T 
     .Left = MyR_L 
     .Width = 130 
     .Height = 30 
     .Placement = xlMoveAndSize 
     .PrintObject = True     'or false as per your taste 
    End With 
+0

实际上,知道为什么你需要动态按钮会很有趣,也许最好有一个列表框和一个按钮。但我只是好奇心,我不想问你的设计;) –

+0

@Doktor OSwaldo,我不介意如果它被质疑,如果有另一种方式来做到这一点我看着它,但我需要动态按钮的原因是(这里的人是[侮辱]),以便在创建新数据集时有一个供人们立即使用的按钮,我们的许多Excel文档有超过50张。我已经能够使用表单按钮来做到这一点,但是这里的人们已经知道破坏宏。 –

+0

你有没有想过用鼠标选择移动按钮,或者我做了什么,例如,鼠标双击处理程序? –

回答

2

使用.onAction方法

像这样的事情

Sheets("someVeryFunnySheetName").buttons("someSeriousButtonName").onAction = "macroName" 

下面是一个例子,如果你要瓦纳参数传递给宏(axleOutputSHeetCounter是一些整数,我认为)

With chartSheet.Buttons("closeOutputSheet") 
    .OnAction = "'Module7_Axle.closeOutputSheet """ & axleOutputSheetCounter & """'" 
    .Characters.text = "Delete sheet" 
    .Characters.Font.Size = 16 
End With 

编辑:对于activeX按钮here你可以找到同样的问题和工作解决方案的问题

+0

我已经尝试过'.OnAction'方法,它们不用于命令按钮,它认为它可以用于Form Control按钮,我使用命令按钮,所以其他人无法轻松处理用我的宏/工作表 –

+1

@ Mr.Burns,这就是为什么你需要activeX按钮而不是表单按钮的原因吗? (我很久以前切换到形式按钮,在MS辉煌的更新之后,它将所有activeX对象打开) –

+0

是编辑ActiveX按钮,您需要加载禁用宏的文档,并且这里没有很多人知道,所以他们不能做任何事情与我的按钮,表单按钮,你可以右键点击它们,并改变你需要(或删除它们) –

3

所以从你的ow你已经发布的链接,你的代码应该是这样的:

Set UF = ActiveWorkbook.VBProject.VBComponents("Name_of_the_userform") 

With UF.CodeModule 
    .InsertLines 2, _ 
       "Private Sub " & MyB.Name & "_Click()" & Chr(13) & _ 
       "****HERE COMES YOUR FUNCTION CALL FOR THE BUTTON****" & Chr(13) & _ 
       "End Sub" 
End With 

但是,这只适用于activeX按钮。它所做的是相当黑客...所以如果你有更好的解决方案,我不会推荐这个。它做的是这样的:每个ActiveX按钮都有一个onclick函数,其语法如下:“ButtonName_Click()”如果你在代码中的某处放置了这一行,它将在点击时执行。现在代码做什么(就像你发布的链接一样),它是否将这些函数写入用户表单代码中。

+0

看起来不可行,代码是一个字符串。 –

+2

林不知道,但通过这一行Set MyB = ActiveSheet.OLEObjects.Add(ClassType:=“Forms.CommandButton.1”,_ Link:= False,DisplayAsIcon:= False)我想他是添加Form按钮,它不是ActiveX,因此它不显式调用函数name_Click()。还是我错了? –

+1

@保罗奥吉尔维我只是帮助他适应他自己的联系。我没有说这是最好的方式 –