手机版

excel图表制作:制作具有数据导航功能的用户表单

时间:2021-09-26 来源:互联网 编辑:宝哥软件园 浏览:

本文描述了如何将用户表单与ADO记录集连接起来,最终创建一个类似于Access表单的用户表单,可以导航到上一条记录、下一条记录、第一条记录、最后一条记录等等。

设计用户表单。

在VBE中,插入一个用户表单,并添加文本框、按钮、标签和其他控件,如下图1所示。

图1

此用户表单中的控件及其对应的名称如下:

用户表单名称:ufEmployee用户表单标题:员工从上到下、从左到右记录在用户表单中。创建以下控件:员工ID文本框名称:tbxEEIDTag:Field0姓氏文本框名称:tbxLastNameTag:Field1名字文本框名称:tbxxfirst nametag:field 2出生日期文本框名称:tbxxblockdatetag:field 3就业日期文本框名称:tbxHireDateTag:field 4命令按钮名称:cmdfirstcaption:标记:buttonfirst命令按钮名称:cmdPrevCaption:标记:ButtonPrev命令按钮名称:cmdNextCaption:标记:ButtonNext命令按钮名称:cmdstcatoption

接下来,编写代码来管理这个用户表单,即处理用户表单中的数据和控件。

用户表单需要六个事件:初始化(当用户表单打开时)、查询关闭(当用户表单关闭时)和每个命令按钮的点击事件。

需要事件代码来显示文本框中设置的记录的当前记录,并防止用户进行错误操作,例如在第一条记录中单击命令按钮cmdPrev()。

在用户表单模块中,声明两个模块级变量:

dim madocon asaadodb。连接dim madors asaadodb。记录集使用的模块级变量是,当用户窗体打开时,连接和记录集对象都在范围内。

以下过程用记录集中当前记录的数据填充文本框。

私有子填充文本框()将每个文本框设为控件将每个文本框设为长度。ControlsIf cTxtBx。标签像“字段*”然后lfldno=mid (ctxtbx。标记,6)ctxtbx . text=madors . fields(lfldno)end如果下一个ctxtbxend sub在设计用户表单时还记得为文本框设置的标记属性吗?让我们看看为什么要设置这个属性。

上面的程序代码遍历用户表单中的所有控件。如果控件具有字段0、字段1、字段2等形式的标签。从记录集中获取与标记同名的字段的数据,以填充相应的文本框。当您打开用户表单或单击任何按钮时,您需要更改文本框以响应事件。因此,四个按钮中任何一个的Initialize事件和click事件都将调用上述程序。在调用上述程序之前,这些事件将首先设置当前记录。

上述程序代码的一个优点是,您可以在不修改代码的情况下添加和删除文本框。前提是只要Tag属性填写正确,文本框就会填写正确。但是,不会检查以确保该字段实际存在。例如,如果您将标记设置为字段10,但记录集只有9个字段,那么它会很混乱。在示例代码中,为了简单起见,我们将不创建这样的显式错误检查代码。

以下程序代码控制命令按钮。如果已经到达第一条记录,我们不希望向用户提供到达第一条记录或上一条记录的按钮选项,因为它已经是第一条记录,并且不再有上一条记录。同样,当当前记录是最后一条记录时,最后一条记录和下一条记录按钮被禁用。每次触发事件时,确保按钮响应当前状态。

私有子禁用按钮(参数数组aBtnTags()作为变量)为我中的每个ctl将我作为远程ctl作为控件。control sctl . Enabled=true for I=LBound(aBtnTags)To UBound(aBtnTags)If CTL。Tag=aBtnTags(i) Thenclt。enabled=false exit before if next next CTL end sub对于上述程序,使用ParamArray参数,可以发送您想要禁用的任意数量按钮的名称。例如,如果您想禁用第一个和上一个按钮,可以按如下方式调用程序:

禁用按钮“按钮优先”、“按钮上一步”

除了传递给参数的按钮之外,每个按钮都是可用的,也就是说,用户可以点击它。如果调用程序时没有任何参数,所有按钮都可用。该程序遍历用户表单中的所有按钮,将其标记属性与参数列表进行比较,如果找到匹配项,则禁用该控件。该程序不区分文本框、命令按钮或任何其他类型的控件。只要确保使用正确的标记属性,以免禁用不想禁用的控件。

现在,创建一个记录集,并确保用有用的信息填充文本框。

每当打开用户表单时,都会触发初始化事件,这是创建记录集的好时机。这样,无论何时显示用户表单,我们都知道有可用的记录集。

private Sub user form _ Initialize()S conn as string dim ssql as string dim sdb path as string dim sdb name as string '存储数据库的路径和名称'可以修改为您自己的路径和名称sdbpath="c: \用户\管理员\ Documents \ " sdbname=" northwind " '存储连接字符串sconn=" DSN=msaccessdatabase"。DBQ。mdb”ScON=ScON " DefaultDir=" SDBpath ";sConn=sConn " DriverId=281FIL=MS访问;MaxBuffersize=2048page time out=5;”存储SQL语句sSQL="SELECT employee。员工标识,员工。姓氏,“sSQL=sSQL”员工。名字,员工。出生日期,员工。从“sdbpath”到“sdbname”的雇佣日期“ssql=ssql”。MDB " "。employee " '在这里,请注意,如果路径中有空格,则需要添加单引号来引用'创建新连接并记录集集集madocon=newadodb。连接集madors=newadod。记录制作者。cursorlocation=aduseclient '打开连接和记录集madocon。opensconnmakers。openssql,madocon,AdOpenDynamic ' '到第一个记录mADORs。MoveFirst“”调用专用进程filltextboxsdisablebuttons“按钮优先”、“按钮在前”end sub。这个程序的大部分代码都是设置字符串,那些烦人的连接字符串和SQL语句很难写。一种方法是在Excel中创建一个外部数据表(数据获取外部数据),然后读取Connection和CommandText属性。然后,进行一些修改,例如从连接字符串中删除ODBC,并使用变量代替数据库信息。建立外部数据表后,您可以输入:

printsheet1.querytables (1)。connection print sheet 1 . query tables(1)。commandtext将获得两个长字符串,可以复制并粘贴到代码中。您也可以像上面的程序一样将代码分成几个字符串。

当用户窗体关闭时,会触发QueryClose事件。如果用户表单没有打开,则不需要记录集,因此在此事件中应该释放它并清空内存。

Private subuserform _ query close(取消为整数,关闭模式为整数)madors . closemadocon . closeset madors=nothing set madocon=nothing end sub下面介绍如何编写命令按钮代码使记录来回移动。

命令按钮基本上有两种,一种按钮到达记录集的两端,即第一条记录和最后一条记录,另一种按钮一次移动一条记录。的所有四个命令按钮都做三件事:使正确的记录成为当前记录,调用FillTextBoxes过程和调用DisableButtons过程。“移动记录”按钮还有一个额外的步骤,即决定哪个记录是当前记录。如果是第一条或最后一条记录,则需要禁用不同的命令按钮。

私有子cmdFirst_Click()mADORs .移动第一个填充文本框禁用按钮"按钮第一个"、"按钮上一个"结束子选项子选项快速单击()按钮移动最后一个按钮,“最后一个”按钮,“下一个”按钮“结束子区域子区域”按钮单击()或.MoveNextFillTextBoxesIf mADORs .绝对位置=mADORs .记录计数然后禁用按钮"按钮上一个"、"按钮下一个"等按钮发送一个子私有子cmdPrev_Click()命令movepreviousfiltextbox esif Madors .绝对位置=1然后禁用按钮"按钮优先"、"按钮前一个"等按钮发送一个结束子上述程序代码中,移动下一个方法移动优先方法、移动前一个方法和将记录指针移至最后一条方法都是记录集对象的方法。

最终的效果如下图2所示。

图2

注意,如果你运行这个用户窗体出现错误,检查一个是否在阀基电子设备中设置了对微软活动数据对象2。十、图书馆的引用;或者是否初始化事件中对数据库的引用路径和名称有误。

版权声明:excel图表制作:制作具有数据导航功能的用户表单是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。