excel学习库

excel表格_excel函数公式大全_execl从入门到精通

工作表数据与UserForm窗口交互工程的设计总结

大家好,我们今天继续讲解VBA数据库解决方案,今日讲解的是第84讲:工作表数据与UserForm窗口的交互工程设计总结。这一讲是讲解的窗体设计的最后一讲,做个总结,把需要注意的问题和大家再讲一下,同时这讲内容也是VBA数据库解决方案的最后一讲内容。 一 在实现窗口的交互工程的设计的时候要考虑到具体应用。 我在第77讲到83讲的讲解中,利用了Application.Caller 来传递我的需求,如下截图在我的窗体中共用7大需求,分别对应着不同的Application.Caller值,这样我可以在加载UserForm窗口时可以精准实现我的控制。如下面的删除代码传递的Application.Caller是8 If Right(Application.Caller, 1) = 8 Then '删除 ' UserForm1.CommandButton3.Enabled = False '开始 UserForm1.CommandButton1.Enabled = False '下一条记录 UserForm1.CommandButton4.Enabled = False '最后一条记录 UserForm1.CommandButton5.Enabled = False '编辑记录 UserForm1.CommandButton7.Enabled = False '查找记录 UserForm1.CommandButton8.Enabled = False '删除记录 UserForm1.CommandButton6.Enabled = False '保存记录 UserForm1.CommandButton9.Enabled = False '录入记录 UserForm1.TextBox1.Enabled = False UserForm1.TextBox2.Enabled = False UserForm1.TextBox3.Enabled = False End If 上述代码就是实现了在加载窗体时,只有“开始”按钮可以响应代码,耳其他的十项内容是不可以响应代码的。 二 在实现窗口的交互工程的设计的时候窗体的设计和代码的设计要同时进行 为了能让代码控制窗体时达到最友好的界面,让用户有友好的体验,我们要对代码和窗体同步的设计,不要先涉及完窗体,再写代码,这样往往会造成在写代码时发现窗体设计的不合理后修改麻烦。更不能在写完代码后再布局窗体。而是应该按照一步一个脚印的办法同步完成窗体的布局和代码的书写。 1.写一段代码时,可能用到多个控件,那么我就先把这些控件先布置好; 2.在布置一个控件时往往会用到其他的控件,那么我们就一并布置好。 3.布置控件和写代码可以同步进行,边写代码边布置控件 如我在写上述工程的保存按钮代码时会遇到录入保存和修改保存两种情况,那么我要合并来考虑,不要分开写; Private Sub CommandButton6_Click() '保存 If UserForm1.TextBox1.Value = "" Or UserForm1.TextBox2.Value = "" Or UserForm1.TextBox3.Value = "" Then MsgBox "信息有空值,请确认!": Exit Sub If MsgBox("是否要保存记录?", vbOKCancel, "提示") = vbCancel Then Exit Sub Dim cnADO, rsADO As Object Dim strPath, strSQL As String Dim myData() As Variant Set cnADO = CreateObject("ADODB.Connection") Set rsADO = CreateObject("ADODB.Recordset") strPath = ThisWorkbook.FullName cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=0';" _ & "data source=" & strPath strSQL = "SELECT * FROM [数据7$]" rsADO.Open strSQL, cnADO, 1, 3 If UserForm1.TextBox1.Enabled = False Then '编辑的保存 If rsADO.RecordCount > 0 Then rsADO.MoveFirst Do While Not rsADO.EOF If Trim(rsADO.Fields(0)) = UserForm1.TextBox1.Value Then rsADO.Fields(1) = UserForm1.TextBox2.Value rsADO.Fields(2) = UserForm1.TextBox3.Value rsADO.Update GoTo 100 End If rsADO.MoveNext Loop 100: UserForm1.TextBox1.Enabled = False UserForm1.TextBox2.Enabled = False UserForm1.TextBox3.Enabled = False UserForm1.CommandButton6.Enabled = False MsgBox ("保存OK!") Else '录入的保存 If rsADO.RecordCount > 0 Then Do While Not rsADO.EOF If Trim(rsADO.Fields(0)) = UserForm1.TextBox1.Value Then MsgBox "员工编号重复,请确认!": GoTo 110 rsADO.MoveNext Loop End If rsADO.AddNew rsADO.Fields(0) = UserForm1.TextBox1.Value rsADO.Fields(1) = UserForm1.TextBox2.Value rsADO.Fields(2) = UserForm1.TextBox3.Value rsADO.Update 110: UserForm1.TextBox1.Value = "" UserForm1.TextBox2.Value = "" UserForm1.TextBox3.Value = "" UserForm1.TextBox1.SetFocus MsgBox ("保存OK!") End If rsADO.Close cnADO.Close Set rsADO = Nothing Set cnADO = Nothing End Sub 上述代码中在打开数据库的连接设置时是一样的,我就用同样的连接来进行。 三 代码要采用自己熟悉的方式写法进行。 实现一个目的有很多方法,写代码也是一样,实现一个功能,有很多代码的写法,有的人喜欢用这种,有的人喜欢有那种,无可厚非。大家要注意VBA的定位,我也多次讲过,对于我们日常工作的OFICE内容,运行时间是可以不用作为第一要素来考虑的。往往,我们更注重的是和手工操作的比较。 所谓采用自己熟悉的方式,就是在我的书籍中经常提到的搭积木的方法,罗列你的代码到合适的位置,然后再修正它。 四 完成自己的工程后要做细致的调试。这种调试包括: 1 通用数据的测试。 2 首尾数据的测试。 3 异常数据的测试。 所谓通用数据就是一般正常的数据实现,首尾数据的测试为了避免由于变量设置失误而造成数据的丢失。异常数据是指通常的“坑”,自己给自己挖个坑,然后自己跳下去,也未尝不可,这样可以更能检测自己的程序运行情况。 好了,再看看我们最后的窗体运行: 最后祝大家在VBA的道路上稳步的前进。 (本书完)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接