问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

excel如何创建用户窗体

发布网友 发布时间:2022-04-27 09:35

我来回答

1个回答

热心网友 时间:2022-05-29 13:02

下面,创建一个简单的用户窗体,用于输入“入职员工信息”数据。
设计用户窗体
下表是个简单的“入职员工信息”数据库,用户窗体用于收集信息并将数据信息保存到该数据库中。

打开VBE,插入用户窗体,默认名为UserForm1。按下表在用户窗体中添加控件并设置属性。

完成的用户窗体如下图所示。

编写代码
1 编写找到数据库工作表中下一个空白行的代码
在VBE中,插入一个类模块,并命名为cExcelUtils,输入下列代码:
Function FindEmptyRow(ws As Worksheet) As LongDim lngReturn As LonglngReturn = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).RowFindEmptyRow = lngReturnEnd Function
2 编写代码以包含每个员工信息的值,以及存储数据库工作表的位置,将数据保存到数据库
插入一个类模块,并命名为cEmployeeInfo,添加下面的代码在模块的声明部分:
Private m_lngID As LongPrivate m_strName As StringPrivate m_strSchool As StringPrivate m_blnAbility As BooleanPrivate m_blnObey As BooleanPrivate m_xlWksht As WorksheetPrivate m_oXL As cExcelUtils
前5个变量是我们在用户窗体中要输入的数据,以及从数据库工作表中产生的ID字段。变量m_xlWksht包含数据库工作表的位置。变量m_oXL决定在哪里放置新数据。
首先,添加数据属性。
Property Get ID() As LongID = m_lngIDEnd Property Property Get Name() As StringName = m_strNameEnd Property Property Let Name(newName As String)m_strName = newNameEnd Property Property Get School() As StringSchool = m_strSchoolEnd Property Property Let School(newSchool As String)m_strSchool = newSchoolEnd Property Property Get Ability() As BooleanAbility = m_blnAbilityEnd Property Property Let Ability(newAbility As Boolean)m_blnAbility = newAbilityEnd Property Property Get Obey() As BooleanObey = m_blnObeyEnd Property Property Let Obey(newObey As Boolean)m_blnObey = newObeyEnd Property Property Get DBWorkSheet() As WorksheetSet DBWorkSheet = m_xlWkshtEnd Property Property Set DBWorkSheet(newSheet As Worksheet)Set m_xlWksht = newSheetEnd Property
注意,ID属性没有Property Let方法,因此该属性是只读的。
下面,添加GetNextID方法找到最后一行,从第一列中获取值,然后增加1,以此来设置ID属性的值。
Public Function GetNextID() As LongDim lngReturn As LonglngReturn = m_xlWksht.Cells(Rows.Count, 1).End(xlUp).Value + 1m_lngID = lngReturn '设置ID属性 GetNextID = lngReturnEnd Function
接下来,添加初始化和清除代码:
Private Sub Class_Initialize()Set m_oXL = New cExcelUtilsEnd Sub Private Sub Class_Terminate()Set m_oXL = NothingEnd Sub
再继续完善该类的功能。先添加一些验证代码。如果Name属性和School属性没有数据的话,则不会保存记录。
Public Function ValidateData() As BooleanDim blnReturn As BooleanIf (Len(Me.Name & "") * Len(Me.School & "")) = 0 ThenblnReturn = FalseElseblnReturn = TrueEnd IfValidateData = blnReturnEnd Function
通过文本值的长度相乘,能够决定是否填充数据。
接下来,编写保存功能的代码。需要知道下一个可用行的行号为数据输入,需要知道该行所在的工作表,并且如果没有错误,返回True。
Public Function Save() As BooleanDim lngNewRowNum As LongDim blnReturn As Boolean If m_xlWksht Is Nothing ThenblnReturn = FalseGoTo Exit_FunctionEnd If lngNewRowNum = m_oXL.FindEmptyRow(m_xlWksht) With m_xlWksht.Cells(lngNewRowNum, 1).Value = Me.ID.Cells(lngNewRowNum, 2).Value = Me.Name.Cells(lngNewRowNum, 3).Value = Me.School.Cells(lngNewRowNum, 4).Value = Me.Ability.Cells(lngNewRowNum, 5).Value = Me.ObeyEnd With If Err.Number = 0 ThenblnReturn = TrueEnd If Exit_Function:Save = blnReturnExit FunctionEnd Function
代码首先检查以确保工作表对象存在,如果不存在则返回False并退出函数。接下来,从cExcelUtils对象中获取空行位置。然后,使用代表数据库工作表的m_xlWksht变量,使用从类属性中的数据填充每列。最后,检查没有发生错误,设置返回值为True,然后退出函数。
这就是cEmployeeInfo类,包含从用户窗体中的输入值,为任何新记录找到下一个ID值,保存数据到工作表中下一个空行。
编写用户窗体代码
在用户窗体代码模块中添加下列模块级变量:
Private m_oEmployeeInfo As cEmployeeInfoPrivate m_blnSaved As Boolean
变量m_blnSaved存储从m_oEmployeeInfo对象的Save方法中返回的值。下面,编写用户窗体初始化和中止事件代码:
Private Sub UserForm_Initialize()Set m_oEmployeeInfo = New cEmployeeInfoSet m_oEmployeeInfo.DBWorkSheet = Sheets("入职员工信息")m_oEmployeeInfo.GetNextIDlblID.Caption = m_oEmployeeInfo.IDm_blnSaved = FalseClearFormEnd Sub Private Sub UserForm_Terminate()Set m_oEmployeeInfo = NothingEnd Sub
在用户窗体初始化时,实例化oEmployeeInfo对象,然后设置DBWorksheet属性。然后,获取下一个可用的ID号并将其放置到标签中。也清除了窗体中的控件值。
Private Sub ClearForm()Me.txtName.Value = ""Me.txtSchool.Value = ""Me.chkAbility.Value = FalseMe.chkObey.Value = FalseEnd Sub
用户窗体中有三个命令按钮:一个用于保存输入的数据,一个用于清除用户窗体数据并添加新记录,一个用于取消数据输入操作并且不保存数据而关闭用户窗体。
“保存”按钮应该执行下列功能:
发送数据到cEmployeeInfo类
验收数据,如果数据无效则返回一条消息
如果数据有效则保存数据,并且如果保存成功则返回一条消息
保存后清除用户窗体数据,并重设保存标志
代码如下:
Private Sub cmdSave_Click()With m_oEmployeeInfo.Name = txtName.Text.School = txtSchool.Text.Ability = chkAbility.Value.Obey = chkObey.ValueEnd WithIf Not m_oEmployeeInfo.ValidateData ThenMsgBox "姓名和毕业院校必填", vbOKOnly, "不能保存"Exit SubElsem_blnSaved = m_oEmployeeInfo.SaveEnd IfDoAfterSave m_blnSavedEnd Sub
过程DoAfterSave用于执行清理。
Private Sub DoAfterSave(success As Boolean)If success ThenClearFormlblID.Caption = m_oEmployeeInfo.GetNextIDMsgBox "记录已保存"ElseMsgBox "没有保存记录"End Ifm_blnSaved = False '重设标志End Sub
“新建”按钮的代码如下,在新建之前,检查文本字段看用户窗体中是否有任何数据:
Private Sub cmdNew_Click()'为新记录设置窗体 Dim iAnswer As Integer'检查当前记录是否被保存 If Not m_blnSaved Then '是否有输入的文本没有被保存 If (Len(Me.txtName.Value & "") + Len(Me.txtSchool.Value & "")) <> 0 TheniAnswer = MsgBox("有没有保存的数据,想继续吗?", vbYesNo, "没有保存数据")If iAnswer = vbYes ThenClearFormEnd IfElseClearFormEnd IfEnd IfEnd Sub
“取消”按钮用来清除用户窗体并关闭该用户窗体:
Private Sub cmdCancel_Click()ClearFormUnload UserForm1End Sub
现在,运行用户窗体来看看效果。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
男人醉女人累原歌 我大概在2009年玩的很早的一款冒险动作游戏有一关是埃及狗头人主角捡武... 提成点数怎么算公式 Huamei/华美每日粗粮粗纤维饼-适用对象 0pp01107格式化后成白屏且不能开机怎么办 五邑大学是市属还是省属 五邑大学校区有几个 窝瓜焖荷包蛋怎么做? 达科塔·芬妮简要生平 湖北自动冷库多少钱 世界著名的家装设计师是谁? 电子表格内怎么设置用户权限? 装修设计是什么专业 怎样在EXCEL表格里设置不同的用户 家装设计师是怎样炼成的 如何设置excel作者 房子装修时,如何选择设计师? 家装设计师分6类,你家选了哪一类? 室内装修设计师应该学什么专业 家装设计师是干什么的? 家装设计师是做什么的? 家装设计师要学什么? 韭菜籽怎么吃药用价值高 韭菜籽和普通韭菜种子有什么不同 韭菜籽有什么用 宝鸡铁路旅游景点介绍 为什么苹果平板使用钉钉连麦没有美颜? 视频宝鸡市市花市树介绍 宝鸡廊桥介绍 车辆事故险能报多少 请问EXCEL的操作问题,如何限制所有用户权限? 你会给宝宝讲哪些睡前故事? 父母给宝宝讲睡前故事,有哪些好处? 给孩子讲睡前故事对孩子有哪些好的影响? 给孩子讲睡前故事对孩子都有哪些影响? 拼多多店铺处于三级惩罚怎么解除 有logo在线设计工具没?一般哪款好? logo在线制作的工具大家熟悉过没?哪个更好? logo在线制作好工具都有什么? 家里的大白墙能贴自粘墙纸吗 我家的是白墙,还能贴自粘墙纸吗? 细木工板吊顶之贴上白色墙纸,或者自粘白色墙纸,不知道效果如何,有人有经验吗? 自粘墙纸和普通墙纸的区别是什么? 自粘墙纸好吗? 墙纸是自粘的好还是用胶水的好谁比较了解 熟宣纸漏矾怎么办? 熟宣纸漏凡是否可以勾线画工笔画 画工笔画时不小心把熟宣纸画漏了怎么办 熟宣纸多少时间露钒 怎样挑选熟宣?(买了几次熟宣纸,薄的、厚的都买了,价位在8元左右,可是都会有点漏)