百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

如何用VBA代码添加Form窗体表单,看完全明了,详细讲解

xsobi 2024-12-09 18:25 1 浏览

NO.1

使用VBA代码添加Form窗体表单,对于一些初学者来说,似乎真的很为难。

除了对代码陌生之外,并不知道如何来进行操作添加后的窗体。

这也是一件十分困扰的事情。

本节将介绍一下,使用vba代码添加窗体,然后在窗体上添加控件,如标签按钮等等方法。

NO.2

vba中 VBComponents 集合里包含了模块、窗体、类模块。

添加窗体就用到VBComponents.Add()来进行操作。

如:

ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)

表示添加一个窗体。

其中vbext_ct_MSForm参数,表示将窗体添加到集合。

类模块vbext_ct_ClassModule 标准模块vbext_ct_StdModule。

新建表单后,运行程序什么也看不到,还需要对表单进行属性设置。

这就是像是盖一栋大楼,只是做了大楼的一个工程设计,仅仅是立项要盖这栋大楼,而没有真正实施盖楼的过程。

所以,名义上的新建了这栋楼,但其并没有变成实际意义上的大楼。

感觉有点不可接受,不管怎么说,以上代码并不能让你看到新建的窗体。

接下来,要对窗体进行一些属性设置,就是说要真正的施工对进入工地盖楼了。

设置窗体属性,要用到Properties()。中文意思就是不动产、财产、所有物等等。

Properties()括号里添加窗体属性名称,然后等于号,属性值。

这样才能够对新建的Form窗体进行实体化赋值。

如下代码:

.Properties("caption") ="我是新建窗体"'窗体标签
.Properties("width") = 900'宽
.Properties("Height") = 600'高

更多窗体属性可查询帮助。

上图为例,将对表格内容作为新建表单的标题名称、宽、高,包括窗体里的标签名称和按钮进行自定义设置。

NO.3

添加窗体之后不是我们的初衷,因为窗体只是一个容器,我们要往里面放很多东西。

这就像大楼主体已经完工,但是不能住人呀,四面没有窗户,也没有各类消防设施,更没有电梯,那么,这就是说,并没有完全得到我们想要的大楼样子。

还要对大楼进行配套设施的安装。

添加标签

那我们再加一个标签吧,就像在大楼顶上安装一个XXX小区的名称,是不是有点意思了。

添加标签代码:

With ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
					.Designer.Controls.Add("Forms.Label.1")
End With

由于新建的窗体还处在编辑模式下,所以不能直接引用Controls.Add(),要在其前面加Designer。

Designer中文意思就"设计师"。看到了吧,整个过程当中,不能以一种既定的事实来对待这件事情。

就像不能对一栋在建的大楼以成熟小区来对待一样,不能随意进出,也不能以为它是一个有人住的地方,真正意义上它还是不算是一个小区。

只有交付使用之后,才能作为一个正常的对象来对待。

所以,要特别注意的地方在对表单里的对象进行属性设置的时候,前面添加"设计师"Designer。

示例:

默认F为新建的窗体对象。

Dim Lobj As Object
        Set Lobj = F.Designer.Controls.Add("Forms.Label.1")
         With Lobj
            .Caption = "恭喜!你已经成功新建了一个表单窗体。"
            .Top = 50
            .Left = 0
            .Height = 90
            .Width = .Parent.Width
            .TextAlign = 2
                    With .Font
                        .Size = 28
                        .Name = "黑体"
                        .Bold = True
                     End With
        End With

添加按钮

同理,添加按钮用如下代码:

With ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
 					.Designer.Controls.Add("Forms.CommandButton.1")
End With

NO.4

显示窗体

如此进行,对代码细致的编写之后,构造整个表单的过程就完成了。

但是,我们还是不能看到它的模样,因为没有把它呈现在眼前。

就比如,在北京盖了一栋大楼,而你在广州。

想要看到这楼,是不是有两个办法,一你亲自来北京,站到大楼下面,二给大楼拍个视频,通过视频信息传输设备观看。

这就是说,这楼是盖好了,在你看到它之前,还有一些方法去完成,不然,真的难说这楼是个什么样子。

说了这么多,编程就是这么玄乎,真真假假,假假真真,要抓到代码表示的实际东西,还真不是一件轻松的事情。

我们接着就是要把窗体呈现在电脑屏幕上,让自己或别人看到它,而不只是某种意义上的代码构造完成这种玄乎的事情。

显示出来也需要一行代码,也十分简单一行代码,如下:

F默认新建的窗体对象

VBA.UserForms.Add(F.Name).Show

运行后效果如下图

是不是完整了一些,如不添加标签和按钮,那么什么也没有。

这样新建后的表单就有了更多的内容。

NO.5

删除窗体

最后一步删除窗体,这个不提倡使用,但要学会使用。

F为默认新建窗体对象变量。

ThisWorkbook.VBProject.VBComponents.Remove F

这句意思是从VBComponents集合中移除F窗体。

这个不能用大楼来比喻,没有移除大楼的过程,而且操作起来也太困难,也现实中最大把设计图纸销毁,完成移除。

NO.6

完整代码

以上代码可作为学习之用,以下偌直接复制到自己的VBE窗体中使用即可。

新建窗体过程函数

Private Sub AddNewForm()
Dim w As Worksheet
Set w = ActiveSheet
Dim F As Object
Set F = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
    With F
        .Properties("caption") ="我新建的表单窗体"
        .Properties("width") =900
        .Properties("Height") = 600
        Dim Lobj As Object
        Set Lobj = F.Designer.Controls.Add("Forms.Label.1")
         With Lobj
            .Caption = "恭喜!" & VBA.vbCrLf & VBA.vbCrLf & "你已经成功新建了一个表单窗体。"
            .Top = 50
            .Left = 0
            .Height = 90
            .Width = .Parent.Width
            .TextAlign = 2
            With .Font
                .Size = 28
                .Name = "黑体"
                .Bold = True
             End With
          End With
          With F.Designer.Controls.Add("Forms.CommandButton.1")
            .Caption = "关 闭"
            .Width = 150
            .Height = 28
            .Top = Lobj.Top + Lobj.Height + 50
            .Left = .Parent.Width \ 2 - .Width \ 2
          End With
    ''''''''''''''''''''''''''''''''''''''''''' Button按钮 CodeModule
    With ThisWorkbook.VBProject.VBComponents(F.Name).CodeModule
        .InsertLines 2, "Private Sub CommandButton1_Click()"
        .InsertLines 3, "Unload me"
        .InsertLines 4, "End Sub"
    End With        
    End With    
    VBA.UserForms.Add(F.Name).Show
    ThisWorkbook.VBProject.VBComponents.Remove F
End Sub

NO.7

学习VBA,从0开始构造一个应用界面,十分不好掌握其中一些代码应用。

有些代码在编辑过程中会遇到很多问题,同时也会增加许多不明白的问题,需要一一解决。

本身VBA已经给出很多常用的一些对象,直接拿来使用就可以,但是对于喜欢结构编程方法的人来说,面向对象真的是小儿科。

怎么办呢,呵呵!努力吧!

---END---

欢迎关注、收藏

相关推荐

斗鱼针针成旻云个人资料 针针年龄身高演艺经历介绍

[闽南网]针针成旻云曾是七煌旗下签约艺人,经常在斗鱼进行直播身高超过170cm的她更因为有一双大长腿而被称为“斗鱼第一美腿”、“电竞第一腿”。本文这就来对针针的个人资料进行详细介绍,想知道她的年龄身高...

轻量级RTSP服务模块和RTSP推流模块适用场景区别

好多开发者一直搞不清轻量级RTSP服务SDK和RTSP推流SDK的区别,以下是相关区别:1.轻量级RTSP服务模块:轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服...

《新·奥特曼》11月18日国内视频平台上线

《新·奥特曼》海报。新京报讯11月14日,由上海新创华文化发展有限公司授权引进电影《新·奥特曼》宣布正式定档11月18日(周五)00:00上线视频平台,上线版本为日语配音中文字幕版。影片由庵野秀明(...

剑指Apple Watch!Android Wear也将支持视频功能

想必智能手表发展到现在,大家最期待的还是视频功能,近日AndroidWear就实现了这一功能,以后就能在手表上看视频了,想想就挺激动的,快来看看吧!其实早在WWDC大会上,老对手AppleWatc...

QT应用编程:基于VLC开发音视频播放器(句柄方式)

一、环境介绍操作系统:win1064位QT版本:QT5.12.6编译器:MinGW32VLC版本:...

OBS 源码分析 obs开发

本文将按照数据源的获取、渲染、推送的直播流程来让大家深入了解一下。1、直播源数据获取obs在启动时会优先加载libobs核心库,这个库初始化obs很多内容,包括crash模块、com、性能监...

Android和iOS端Moments更新:支持视频分享功能

Moments是社交网络巨头Facebook推出的一款私人照片分享应用,今天公司宣布对Android端和iOS端应用同时升级,新增对视频分享功能的支持。事实上早在数周之前,Facebook就曾表示Mo...

您很快就可以在Android Galaxy设备之间传输视频通话

在阅读此文之前,辛苦点击右上角的“关注”,既方便您进行讨论与分享,又能给您带来不一样的参与感,感谢您的支持!导语:在科技领域,每时每刻都有新的发展,令人兴奋的创新不断涌现。早在八月份,Android系...

一篇文章带你FFmpeg到流媒体服务器开发

安装ffmpeg:下载FFmpeg和libx264的包ffmpeg-2.4.1.tar.bz2last_x264.tar.bz2libx264需要yasm,所以先安装yasmapt-getinst...

YouTube 为 Android 平台提供 1440P 视频

安锋网8月10日消息,Android从起初的480P的屏幕分辨率发展到2014年的1440P花了将近六年的时间,一般认为1080P的屏幕分辨率已经是人眼可以识别的极限,但是...

FFmpeg 调用 Android MediaCodec 进行硬解码(附源码)

FFmpeg在3.1版本之后支持调用平台硬件进行解码,也就是说可以通过FFmpeg的C代码去调用Android上的MediaCodec了。在官网上有对应说明,地址如下:trac....

Android FFmpeg + OpenGL ES YUV Player

1、FFmpeg解出YUV帧数据1.1方法介绍打开封装格式上下文...

基于WebRTC的Android移动端无线视频传输

摘要:视频传输技术在现代社会广泛应用,人们对其的要求也越来越高,其发展的趋势是方便、快捷、随时随地。传统的视频传输过于依赖线路,线路的走向限制了传输的很多可能,所以无线传输才是发展的方向。本文提出...

使用python爬取抖音app视频 python爬取抖音视频数据

记录一下如何用python爬取app数据,本文以爬取抖音视频app为例。编程工具:pycharm...

Android IOS WebRTC 音视频开发总结(七七)-- WebRTC的架构和协议栈

本文主要介绍WebRTC的架构和协议栈(我们翻译和整理的,译者:litie),最早发表在【编风网】为了便于理解,我们来看一个最基本的三角形WebRTC架构(见下图)。在这个架构中,移动电话用“浏览器M...