大家好,我們今天繼續講解VBA數據庫解決方案,今日講解的是第77講: 工作表數據與UserForm窗口的交互:
第一條記錄的顯示。
從這講開始,我將利用7講的時間,給大家詳細講解一個工作表數據庫的准實例,雖然是小型的工程,但麻雀雖小,五臟俱全。一些必要的操作都有,其中還會涉及到窗體的設計,按鈕的設計等等內容,可以說,如果你需要管理的數據字段和我的例子相同的話,基本上可以不做修改就可以直接使用。由於此工程內容較多,代碼也較多,還有窗體的設計,我只能一步一步的講解,最後再展示給大家最後總的工程內容。
好了,我們今日的內容是實現工作表內容如何體現在UserForm窗口,先實現第一條記錄的體現。
思路:
① 首先建立一個UserForm窗口,然後在上面設計文本框用於裝載數據,按鈕用於指令的下達。
② 在彈出UserForm窗口後,EXCEL文件要隱藏。
③ 由於我的窗體中會陸續增加很多按鈕,要根據實際的要求,每次起作用的按鈕不一樣。
下面是工作表的數據:
下面我們來實現我們的目的:
首先建立一個窗口,由於我的設計時一次調試完成的,本講只講解本講涉及到的內容,窗口如下:
下面看我的代碼:
1 進入交互窗體界面:
Sub mynzRecords_77() '將工作表數據變成記錄集,並將第一條數據顯示到UserForm窗口
Application.Visible = False
UserForm1.Show
End Sub
2 推出按鈕的代碼:
Private Sub CommandButton2_Click() '退出
Unload Me
Application.Visible = True
End Sub
3 開始按鈕的代碼:
Private Sub CommandButton3_Click() '開始按鈕
Dim cnADO, rsADO As Object
Dim strPath, strSQL As String
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=1';" _
& "data source=" & strPath
strSQL = "SELECT * FROM [數據7$]"
rsADO.Open strSQL, cnADO, 1, 3
If rsADO.RecordCount > 0 Then
rsADO.MoveFirst
UserForm1.TextBox1.Value = rsADO.Fields(0)
UserForm1.TextBox2.Value = rsADO.Fields(1)
UserForm1.TextBox3.Value = rsADO.Fields(2)
End If
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
If Right(Application.Caller, 1) = 2 Then '下一條
UserForm1.CommandButton1.Enabled = True
End If
If Right(Application.Caller, 1) = 3 Then '最後一條
UserForm1.CommandButton4.Enabled = True
End If
If Right(Application.Caller, 1) = 5 Then '編輯記錄
UserForm1.CommandButton1.Enabled = True
UserForm1.CommandButton4.Enabled = True
UserForm1.CommandButton5.Enabled = True
End If
If Right(Application.Caller, 1) = 8 Then '刪除
UserForm1.CommandButton1.Enabled = True
UserForm1.CommandButton4.Enabled = True
UserForm1.CommandButton8.Enabled = True '刪除記錄
End If
End Sub
Private Sub UserForm_Activate()
UserForm1.CommandButton2.SetFocus
If Right(Application.Caller, 1) = 1 Then '第一條記錄顯示
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 '錄入記錄
End If
If Right(Application.Caller, 1) = 2 Then '下一條記錄
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 '錄入記錄
End If
If Right(Application.Caller, 1) = 3 Then '顯示最後記錄
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 '錄入記錄
End If
If Right(Application.Caller, 1) = 5 Then '顯示編輯記錄
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
If Right(Application.Caller, 1) = 6 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 '保存記錄
End If
If Right(Application.Caller, 1) = 7 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.TextBox2.Enabled = False
UserForm1.TextBox3.Enabled = False
End If
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
End Sub
代碼截圖:
代碼重點講解:
1 上述代碼實現了窗體和工作表數據的交互,將工作表數據顯示在窗體上。
2 Application.Visible = False
UserForm1.Show
點擊進入窗體時,EXCEL文件隱藏不可用,窗體出現。
3 Unload Me
Application.Visible = True
當窗體退出時,EXCEL文件可用。
4 rsADO.Open strSQL, cnADO, 1, 3
If rsADO.RecordCount > 0 Then
rsADO.MoveFirst
UserForm1.TextBox1.Value = rsADO.Fields(0)
UserForm1.TextBox2.Value = rsADO.Fields(1)
UserForm1.TextBox3.Value = rsADO.Fields(2)
End If
當點擊開始時,會建立工作表ADO的連接,同時記錄集打開工作表,記錄移動到第一條,TextBox1顯示不同的字段。
下面看代碼的運行:
今日內容回向:
1 如何控制窗體的顯示出不同的可用按鈕?
2 為了顯示記錄集,要把記錄的各個字段賦值給窗口的哪個控件?