ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3966|回复: 2

VBA自动创建窗体及控件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-7-6 11:45 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 lss001 于 2017-7-13 12:33 编辑

Sub VBAzdcjct() 'VBA自动创建窗体及控件
    Dim Usm As Object'声明窗体
    Set Usm = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)t '创建窗体
    On Error Resume Next '忽略错误代码
    With Usm
        '由于该窗体还未运行,相当于处于设计状态
        '对于该窗体的属性,则需要用Properties属性
        .Properties("Caption") = "自动创建窗体" '窗体命名
        .Properties("Height") = 350 '窗体高度
        .Properties("Width") = 400 '窗体宽度
        With .Designer
        '要在该窗体上创建控件对象,则需要用Designer属性
            For j = 1 To 2 '创建标签对象,可循环创建
                Set Lal = .Controls.Add("Forms.Label.1")
                '*特别注意创建任何控件对象应加上.1
                With Lal '设置Label标签属性
                    .Top = 12 + 18 * (j - 1) '标签与窗体上边框距离
                    .Left = 18 '标签与窗体左边框距离
                    .Height = 12 '标签高度
                    .Width = 110 '标签宽度
                    .Caption = j '标签命名
                    .Font.Size = 11 '字体大小
                    .ForeColor = 0 '标签前景(字体)颜色
                    .BackColor = 14136213 '标签背景颜色
                    '其它设置可按照以上添加
                End With
            Next
            Set Lix = .Controls.Add("Forms.ListBox.1")
            '创建ListBox对象
        End With
        With .CodeModule
        '设置ListBox控件关联事件代码,则需要用CodeModule属性
            .DeleteLines 1, .CountOfLines
            '以下双引号中的代码即为ListBox控件关联事件代码
            .InsertLines 1, "Private Sub UserForm_Initialize()"
            .InsertLines 2, "Dim arr()"
            .InsertLines 3, "arr = Range(""A2:G"" & Cells(Rows.Count, 1).End(xlUp).Row)"
            .InsertLines 4, "    With ListBox1"
            .InsertLines 5, "        .Top = 50"
            .InsertLines 6, "        .Left = 50"
            .InsertLines 7, "        .Height = 250"
            .InsertLines 8, "        .Width = 300"
            .InsertLines 9, "        .ColumnCount = 7"
            .InsertLines 10, "       .ColumnWidths = ""35,45,45,45,45,40,50"""
            .InsertLines 11, "       .BoundColumn = 1"
            .InsertLines 12, "       .ColumnHeads = True"
            .InsertLines 13, "       .TextAlign = 1"
            .InsertLines 14, "       .List = arr"
            .InsertLines 15, "    End With"
            .InsertLines 16, "End Sub"
            
            .InsertLines 17, "Private Sub ListBox1_Click()"
            .InsertLines 18, "    Dim r As Integer"
            .InsertLines 19, "    Dim i As Integer"
            .InsertLines 20, "    With Sheet1"
            .InsertLines 21, "    r = .Cells(.Rows.Count, 1).End(xlUp).Row + 1"
            .InsertLines 22, "        For i = 1 To ListBox1.ColumnCount"
            .InsertLines 23, "            .Cells(r, i) = ListBox1.Column(i - 1)"
            .InsertLines 24, "        Next"
            .InsertLines 25, "    End With"
            .InsertLines 26, "End Sub"
        End With
    End With
    On Error GoTo 0 '关闭错误处理
    VBA.UserForms.Add(Usm.Name).Show  '加载并显示该窗体,注意与平时加载不同ThisWorkbook.VBProject.VBComponents.Remove Usm  '窗体运行完后自动删除
End Sub
   

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-2-2 11:26 | 显示全部楼层
Set Usm = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)t '创建窗体         这句话错误

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-11 13:46 来自手机 | 显示全部楼层
王跃峰 发表于 2022-2-2 11:26
Set Usm = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)t '创建窗体         这句话错误

更正→
Set Usm = ThisWorkbook.VBProject.VBComponents.Add(3)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 09:42 , Processed in 0.032293 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表