excel图表制作:制作具有数据导航功能的用户窗体( 二 )

  • Dim i As Long
  • Dim ctl As Control
  • For Each ctl In Me.Controls
  • ctl.Enabled = True
  • For i = LBound(aBtnTags) To UBound(aBtnTags)
  • If ctl.Tag = aBtnTags(i) Then
  • ctl.Enabled = False
  • Exit For
  • End If
  • Next i
  • Next ctl
  • End Sub
  • 对于上面的程序,使用了ParamArray参数,可以发送任意数量想要禁用的按钮的名称 。例如,如果想禁用第一个和前一个按钮,就可以像下面这样调用该程序:
    DisableButtons “ButtonFirst”, “ButtonPrev”
    除了传递给参数的按钮外,每个按钮都可用,即能被用户单击 。如果不带任何参数调用该程序,那么所有的按钮都是可用的 。该程序遍历用户窗体中的所有按钮,将其Tag属性与参数列表对比,如果发现匹配则禁用该控件 。该程序不会区分文本框、命令按钮或任何其它类型的控件 。你只需确保使用了正确的Tag属性,以免禁用了你不想禁用的控件 。
    现在,创建记录集,确保使用有用的信息来填充文本框 。
    无论用户窗体在什么时候打开都会触发Initialize事件,此时适合创建记录集 。这样,无论何时用户窗体显示,我们都知道有可用的记录集存在 。
    • Private Sub UserForm_Initialize()
    • DimsConn As String
    • Dim sSQL As String
    • Dim sDbPath As String
    • Dim sDbName As String
    • ‘存储数据库的路径和名称
    • ‘可以修改为你自已的路径和名称
    • sDbPath =”C:\Users\Administrator\Documents\”
    • sDbName = “Northwind”
    • ‘存储连接字符串
    • sConn = “DSN=MS Access Database;”
    • sConn = sConn & “DBQ=” &sDbPath & “” & sDbName & “.mdb;”
    • sConn = sConn & “DefaultDir=”& sDbPath & “;”
    • sConn = sConn &”DriverId=281;FIL=MS Access;MaxBuffersize=2048;PageTimeout=5;”
    • ‘存储SQL语句
    • sSQL = “SELECT 雇员.雇员ID,雇员.姓氏,”
    • sSQL = sSQL & “雇员.名字,雇员.出生日期,雇员.雇用日期 “
    • sSQL = sSQL & “FROM ” &sDbPath & “” & sDbName & “.mdb” & “.雇员” ‘此处要注意如果路径中有空格则需添加单引号来引用
    • ‘创建新的连接和记录集
    • Set mADOCon = New ADODB.Connection
    • Set mADORs = New ADODB.Recordset
    • mADORs.CursorLocation = adUseClient
    • ‘打开连接和记录集
    • mADOCon.Open sConn
    • mADORs.Open sSQL, mADOCon, adOpenDynamic
    • ‘到第一条记录
    • mADORs.MoveFirst
    • ‘调用特定目的的过程
    • FillTextBoxes
    • DisableButtons “ButtonFirst”,”ButtonPrev”
    • End Sub
    这个程序的大部分代码是设置字符串,那些烦人的连接字符串和SQL语句是难以编写的 。其中一种方法是在Excel中创建外部数据表(数据>获取外部数据),然后读取Connection和CommandText属性 。接着,做一些修改,例如从连接字符串中移除ODBC以及使用变量代替数据库信息 。一旦建立了外部数据表,可在立即窗口输入:
    • Print Sheet1.QueryTables(1).Connection
    • Print Sheet1.QueryTables(1).CommandText
    将获得两个长字符串,可以将其复制并粘贴到代码中 。也可以像上面程序中一样,将代码分成几个字符串 。
    当关闭用户窗体时,将触发QueryClose事件 。如果用户窗体不打开,就不需要记录集,因此在该事件中要将其释放并清空内存 。