1、什么是窗体: 窗体是VBA里做好了的一个与用户交互的东西,在VBA编辑器界面,点击菜单插入-用户窗体,这样就创建了一个窗体界面,在VBA编辑器里的是一个编辑界面: ?...但是,个人认为窗体在VBA里使用的是不会很频繁的: 由于Excel VBA一般都是处理较为简单的东西,直接一个按钮运行一段程序就完了,所以一般都不怎么需要去制作交互界面。...在VBA编辑器可以直接双击UserForm1那个界面进入到代码编辑,这样进入会自动插入代码: Private Sub UserForm_Click() End Sub 从名称可以看出,这个就是窗体的1...个单击事件,添加一条代码: Private Sub UserForm_Click() MsgBox "点击窗体" End Sub 在普通模块编写一个过程: Sub TestUserFrom(...) UserForm1.Show End Sub UserForm1是插入窗体时,默认的名称,可以通过属性窗口修改: ?
标签:VBA,用户窗体 在用户窗体中,当用户选择组合框中某项目时,该项目内容输入到相应的文本框中。 如下图1所示,当选择左侧组织合框下拉列表中的某项目后,其右侧文本框中显示该项目。...图1 在VBE中,插入一个类模块,将其重命名为“CComboboxes”。...在该类模块中,输入代码: Private WithEvents myCB As MSForms.ComboBox Private myIndex As Long Public Sub New_CB(CB...Text End If End With End Sub 注意,代码中“myData”中存放组织框下拉列表数据的工作表,字母A代表数据存放在工作表列A。...双击打开用户窗体代码模块,输入代码: Private CB(1 To 10) As New CComboboxes Private Sub UserForm_Initialize() Dim i As
使用VBA宏,可以自动执行重复、单调且有时非常无聊的任务。在某些情况下,这有可能将数小时的工作减少到几分钟或几秒钟。 但并非所有宏都可以实现此类性能要求,有时候数据实在太庞大了,电脑只能运行这么快。...图3 2.编写用户窗体代码 双击用户窗体进入其代码模块,在UserForm_Activate事件中,输入代码。...PCT = 计算出不断增加的百分比,从1/N开始,以N/N结束(即1%到100%)。表中的记录越多,百分比计算的粒度就越细。...完成时从屏幕移除窗体: Unload UserForm_v1 3.启动用户窗体 插入一个标准模块,输入下面的代码: Load UserForm_v1 With UserForm_v1 .StartUpPosition...图4 完整的代码如下: 1.标准模块中的代码 Sub GetMyForm_v1() Load UserForm_v1 With UserForm_v1 .StartUpPosition
文章背景:在使用VBA的用户窗体(userform)时,有时会用到二级下拉菜单。比如选择院系(一级下拉菜单)后,班级(二级下拉菜单)的内容自动更新;选择省份后,该省份下面所属的市相应更新。...表1的数据如下: 用户窗体的内容如下: 省份combox的名称取为provinceselect;城市combox的名称取为cityceselect。...用户窗体内的VBA代码如下: Option Explicit Private Sub provinceselect_Change() 'Populate city data....provinceselect.Text = Range("C1").Value End Sub 窗体初始化时,将省份的数据填入;当省份的选项发生变化时,城市的信息也做相应的修改。...参考资料: [1] Coursera课程(Excel/VBA for Creative Problem Solving, Part 3)
文章背景:用户窗体是Excel中的UserForm对象。在使用UserForm时,曾经目前遇到过两个问题。...UserForm中添加最大化、最小化按钮。...= IStyle Or WS_MAXIMIZEBOX '最大化 SetWindowLong hWndForm, GWL_STYLE, IStyle End Sub 主要涉及两大块代码,一块在模块级变量区域...在模块级变量区域,也就是第一个sub过程之前,添加如下代码: '用于最小化窗体的代码实现 '参考资料:http://club.excelhome.net/thread-878927-1-1.html Private...参考资料: VBA窗体最大化最小化按钮实现(https://ddz.red/uiOTy) 在VBA代码中最小化当前窗体(https://ddz.red/Ku7ey)
该窗体通过UserForm对象表示。 窗体上的控件,包括窗体的可视化和功能界面。每种控件都由其自己的类表示。 用户窗体中的VBA代码。...UserForm对象以及可以放置在窗体上的控件具有确定对象的外观和行为以及与该对象相关的任何数据的属性和方法。大多数对象还可以检测事件,其中大部分是用户操作,例如用鼠标单击某些内容。...其余所有代码都在程序中,该程序是VBA模块的一部分。...下一步也是最后一步,就是将代码添加到工程中,从窗体中显示和检索数据。 1.在“工程”窗口中,双击代码模块的名称以打开其编辑窗口。 2.选择“插入➪过程”以显示“添加过程”对话框。...该程序将显示一个带有你输入的文本的消息框,显示VBA代码如何从用户窗体中检索数据。 这是一个简单的演示。
标签:VBA 在上篇文章:创建可调大小的用户窗体——使用Windows API中,我们使用Windows API实现了允许用户可以调整用户窗体的大小。本文仅使用VBA来实现同样的效果。...VBA解决方案:用户窗体包含一个对象,单击该对象时会记录鼠标的位置;随着鼠标的移动,用户窗体及其对象将根据新的鼠标位置重新定位或调整大小;当释放鼠标按钮时,停止移动以调整大小。...图2 在用户窗体代码模块中,输入下面的代码: Private resizeEnabled As Boolean Private mouseX As Double Private mouseY As Double...如果两者都为True,则会根据鼠标移动的大小重新定位或调整UserForm和对象的大小。...图3 注:有兴趣的朋友可以到知识星球App完美Excel社群下载示例工作簿。 欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
这种数据真的很难看懂: 一般会对其画折线图或者数据条,相比起来就非常直观: 但是每一列都要手动这样设置就非常累了,所以这里就用到了VBA宏(或者Pandas...VBA宏方法 从这里进入宏: 随便写一个宏名后点创建: 这里可以写宏代码: 最终的效果如图: 参考代码:...模块1: Global History(1 To 5) As Variant Global HistoryIndex As Integer Sub SaveCurrentState(ws As Worksheet...() UserForm1.Show End Sub UserForm1: Private Sub InitializeHistory() Dim i As Integer For...ActiveSheet End If End Sub Private Sub Button_Undo_Click() Undo ActiveSheet End Sub 最后,导出模块
模块的隐藏看起来好像好高深,其实原理和前面的清除VBAProject工程密码的原理是一样的,只需要改写PROJECT数据流。...不过需要注意的是,类模块不能隐藏,另外还必需要有一个可见的模块,实现代码: '隐藏某个模块:在VBA工程窗口无法查看 'ModuleName 模块的名称 'Return 返回出错信息 Function...= "CVBAProject: 模块[" & ModuleName & "]已隐藏" Exit Function End If strSrc = VBA.Replace...ret = cf.ReWriteStream(PrePath & "PROJECT", b) If VBA.Len(ret) Then HideModule = ret...Exit Function End If End Function '取消隐藏某个模块 'ModuleName 模块的名称 'Return 返回出错信息 Function
标签:VBA,类模块,用户窗体 本示例演示,当用户单击用户窗体中的命令按钮时,会弹出该命令按钮名称信息。 这个示例来源于ozgrid.com,有兴趣的朋友可以研究。...图2 在VBE中,插入一个类模块,将其重命名为“clsFrmCtls”,输入下面的代码: Public mName Public mFrm As Object Public WithEvents mCommandbutton...mCommandButton_Click() RaiseEvent mFrm.SelectedChange(mName) End Sub 然后,插入一个用户窗体,添加控件,如上图1所示,在该用户窗体代码模块中...Collection Public Sub SelectedChange(objCtr) MsgBox objCtr MsgBox Me(objCtr).Caption End Sub Private Sub UserForm_Initialize...mcolEvents.Add cCBEvents Next intCon End Sub Private Sub butClose_Click() Unload Me End Sub Private Sub UserForm_Terminate
excelperfect 标签:VBA,类模块,用户窗体,文本框 在用户窗体中有许多个文本框,我想让这些文本框都不能输入字母。代替一个个对文本框进行处理,可以使用类模块来操作。...图1 在VBE中,插入一个类模块,将其重命名为“clsObjHandler”,在代码窗口输入下面的代码: Private WithEvents tbxCustomTextbox As MSForms.TextBox...0 End Select End Sub Private Sub Class_Terminate() Set tbxCustomTextbox = Nothing End Sub 打开用户窗体代码模块窗口...,在其中输入下面的代码: Dim colTbxs As Collection Private Sub UserForm_Initialize() Dim ctlLoop As MSForms.Control...clsObject.Control = ctlLoop '添加事件处理 colTbxs.Add clsObject End If Next ctlLoop End Sub Private Sub UserForm_Terminate
文章背景:最近在查看同事写的VBA代码时,发现了DTPicker日期控件。...(2)将OCX文件拷贝到指定文件夹内。对于64位的windows系统,拷贝路径为:C:\Windows\SysWOW64。...注册成功后,打开Excel文件,此时可以在excel表格和VBA窗口中调用DTPicker控件。...file=166&id=8d8aad175c9779503a68136e49eea2b4) [2] VBA Userform with DTPicker(https://stackoverflow.com.../questions/33798867/vba-userform-with-dtpicker) [3] How to install mscomct2.ocx file from .cab file (
通过前面的文章能够知道,每一个模块的代码,在VBAProject中也就是一个数据流,这个数据流经过了run length encoding的算法进行压缩。...前面介绍的是自己使用VBA代码来解压缩,其实也有现成的API RtlDecompressBuffer可以使用,具体用法可以网上找找。 所以,只要能找到模块的数据流,然后进行解压缩就可以还原模块的代码。...模块的数据流也就是在复合文档中读取一个数据流,另外要注意的是,这样读取出来的模块数据流并不都是我们写的VBA代码,还需要结合解析dir流时候得到的模块信息进行截取,再进行解压缩: '读取某个模块的代码...'ModuleName 模块的名称 'StrCode 返回模块的代码 'Return 返回出错信息 Function GetModuleCode(ModuleName As String,...If 'vba代码只是后面的一部分 Dim bCode() As Byte Dim moduleIndex As Long moduleIndex
由于不确定工作表的数量,所以不能通过拖拽的方式添加指定数量的控件,这时候就需要用到UserForm的Initialize事件,在UserForm初始化的时候来添加控件,首先仍然拖拽一个命令按钮在窗体的最上面...,修改Caption为激活,然后进入窗体代码编辑: Private Sub UserForm_Initialize() '定义MSForms.OptionButton变量 Dim...关键字Me,在这里就是指添加的窗体UserForm1,这个关键字还可以在类模块里使用,所代表的也就是那个类。...'遍历窗体上的控件 For i = 0 To Me.Controls.Count - 1 '找到的是MSForms.OptionButton控件 If VBA.TypeName
源代码: Option Explicit Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset ''数据库连接字符 Private Function...String Dim STR As String, PDER As String, SOUR As String '' PDER = "Microsoft.ace.OLEDB.12.0" ''数据库引擎...accdb格式 PDER = "Microsoft.Jet.OLEDB.4.0" ''数据库引擎 SOUR = App.Path & "\db_gzb.mdb" ''数据库地址...SOUR + ";" STR = STR + "Persist Security Info=False;" CNSTR = STR End Function ''初始化数据库...Public Function db_rs(sql As String) As ADODB.Recordset If cn.State 1 Then db_con '检查数据库是否连接成功
窗体主要是为了做交互界面,VBA里已经做好了一些可以直接添加到窗体上的控件: ?...最常用的一个控件应该是命令按钮,拖拽一个到窗体,然后双击按钮就可以进入代码编辑,默认就会添加单击事件: Private Sub CommandButton1_Click() End Sub 我们实现一个简单的功能...在VBA编辑器插入一个窗体,添加3个命令按钮,选中按钮,在属性窗口修改Caption属性分别为Sheet1、Sheet2、Sheet3,编辑代码: Private Sub CommandButton1_...).Activate End Sub Private Sub CommandButton3_Click() Worksheets("Sheet3").Activate End Sub 在普通模块编辑代码...: Sub TestUserFrom() UserForm1.Show End Sub 运行后: ?
标签:VBA,用户窗体,TreeView控件 我们都知道,使用TreeView控件可以创建树状目录结构,但如何创建,还是有些技巧,这就是本文要介绍的内容。...图1 细心的朋友可能注意到,这个目录是根据工作表中的内容结构创建的。只要我们按一定的规则在工作表中输入数据,代码就会根据这些数据创建出相应的分层目录结构。...图2 在该用户窗体代码模块中,输入下列代码: Option Explicit Private Sub CommandButton1_Click() Dim intCount As Integer,...Chr(13) & strNodes & Chr(13), , "已选取任务" End If End Sub Private Sub CommandButton2_Click() Unload UserForm1...1 Next Range("H1:H" & objDict.Count) = Application.Transpose(objDict.keys) End Sub Private Sub UserForm_Initialize
需求 现要求将一个 Excel 数据表中的每行数据导成一个 Word 文档,即有多少行数据就生成多少个 Word 文档,Excel 每列与 Word 文档中的表格项一一对应。...实现 前置工作:将 Word 文档空表格当作模板文档做好,与 Excel 数据源文件置于同一路径下。..."/" f = p & "空白模板.doc" Dim myWS As Worksheet Set myWS = ThisWorkbook.Sheets(1) '存有数据的表格...For i = 3 To 54 '遍历数据行 FileCopy f, p & "test/" & myWS.Cells(i, 2).Text & ".doc"....doc") '打开新文档 d.tables(1).Cell(1, 2) = myWS.Cells(i, 2).Text '### '复制表格每列内容到文档
测试中经常会遇到对数据的处理,比如我要删除某些特定数据,数据源是从网页请求中抓取,这时候可能复制下来一大堆内容,其中我们只需要特定的某些部分,笔者通常做法是拷贝到notepad++中处理,结合...RegTester工具,但是RegTest需要导出匹配数据,不能直接拷贝,稍微麻烦了一点点......于是想用vba写一个正则表达式提取工具好了,又不花时间。...(1)打开文件启动UserForm Private Sub Workbook_Open() Application.Wait Now() + TimeSerial(0, 0, 1) RegGetFrm.Show...0 End Sub (2)关闭UserForm时,关闭文件 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer
领取专属 10元无门槛券
手把手带您无忧上云