首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将代码分配给动态创建的按钮

将代码分配给动态创建的按钮
EN

Stack Overflow用户
提问于 2012-04-19 16:41:12
回答 2查看 81.4K关注 0票数 21

我正在尝试获得一个我在excel用户表单上动态创建的按钮,用来运行一个名为transfer的宏,它是我用Module 1编写的,位于我的项目的“模块”部分。

下面我已经粘贴了到目前为止我在用户表单中编写的代码,它实际上设法在框架中创建了Transfer to Sheet按钮(我也是动态创建的),但由于某种原因,当我运行VBA时,我收到一条438 error消息,上面写着Object doesn't support this property or method

有人能告诉我如何解决这个问题吗?

代码如下:

代码语言:javascript
复制
Dim framecontrol1 As Control

Set workitemframe = Controls.Add("Forms.Frame.1")
With workitemframe
    .Width = 400
    .Height = 400
    .Top = 160
    .Left = 2
    .ZOrder (1)
    .Visible = True
End With

workitemframe.Caption = "Test"
Set framecontrol1 = workitemframe.Controls.Add("Forms.commandbutton.1")

With framecontrol1
    .Width = 100
    .Top = 70
    .Left = 10
    .ZOrder (1)
    .Visible = True
    .Caption = "Transfer to Sheet"
End With
framecontrol1.OnAction = "transfer"
EN

回答 2

Stack Overflow用户

发布于 2012-04-19 17:13:25

下面是一个例子。请根据您的需要进行修改:)

此示例将创建一个命令按钮并为其分配代码,以便当按下该按钮时,它将显示"Hello World“。

将此代码粘贴到命令按钮的单击事件中,这将动态创建一个新的命令按钮并为其分配代码。

代码语言:javascript
复制
Option Explicit

Dim cmdArray() As New Class1

Private Sub CommandButton1_Click()
    Dim ctl_Command As Control
    Dim i As Long

    i = 1

    Set ctl_Command = Me.Controls.Add("Forms.CommandButton.1", "CmdXYZ" & i, False)

    With ctl_Command
        .Left = 100
        .Top = 100
        .Width = 255
        .Caption = "Click Me " & CStr(i)
        .Visible = True
    End With

    ReDim Preserve cmdArray(1 To i)
    Set cmdArray(i).CmdEvents = ctl_Command

    Set ctl_Command = Nothing

End Sub

并将此代码粘贴到类模块中

代码语言:javascript
复制
Option Explicit

Public WithEvents CmdEvents As MSForms.CommandButton

Private Sub CmdEvents_Click()

    MsgBox "Hello Word"

End Sub

快照

票数 25
EN

Stack Overflow用户

发布于 2012-04-19 19:14:35

您需要以编程方式将代码添加到UserForm中。我使用了这个vbax article中的代码作为参考

代码如下:

  1. 从普通模块运行
  2. 将按钮添加到名为UserForm1的UserForm
  3. 将以下代码添加到单击事件的用户窗体

私有子CommandButton1_Click()调用转接端子

正常模块中的VBA

代码语言:javascript
复制
    Sub AddToForm()
    Dim UF As Object
    Dim frameCOntrol1 As Object
    Set UF = ActiveWorkbook.VBProject.VBComponents("UserForm1")
    Set frameCOntrol1 = UF.designer.Controls.Add("Forms.CommandButton.1")
    With frameCOntrol1
        .Width = 100
        .Top = 70
        .Left = 10
        .ZOrder (1)
        .Visible = True
        .Caption = "Transfer to Sheet"
    End With

    With UF.CodeModule
        .InsertLines 2, _
                     "Private Sub " & frameCOntrol1.Name & "_Click()" & Chr(13) & _
                     "Call Transfer" & Chr(13) & _
                     "End Sub"
    End With

End Sub
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10224511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档