大家好,我們今天繼續講解VBA數據庫解決方案,今日講解的是第80講:工作表數據與UserForm窗口的交互過程中:如何對顯示的記錄進行編輯和保存。在前幾講中,我們實現了将工作表的數據傳給UserForm窗口,實現的開始記錄、下一條記錄最後記錄的顯示,我們今日繼續講解如何實現編輯和保存記錄。前幾講是查找與顯示,查找的目的是為了編輯。
思路:①在UserForm窗口上,設置顯示編輯和保存按鈕,用于指令的下達。
②在彈出UserForm窗口後,EXCEL文件要隐藏。
③要考慮到按鈕之間的作用,此按鈕要在開始按鈕按過之後才可以響應動作。同時窗口上可以顯示的按鈕還有"顯示下一條記錄"和"顯示最後記錄"按鈕
下面我們首先實現UserForm窗體:在上一講的基礎上我這次增加的是"編輯"和"保存"按鈕:
下面看代碼的實現:
1 從EXCEL窗口進入人機交互窗口:
Sub mynzRecords_80() '将工作表數據變成記錄集,并實現編輯和保存
Application.Visible = False
UserForm1.Show
End Sub
代碼解釋:上述代碼完成從EXCEL界面到人機交互UserForm窗體,這時的Application.Caller是5.
2 窗體加載時設置相關的屬性代碼: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
代碼解釋:上述代碼設置了各個按鈕的必要屬性,大家要注意,由于涉及到保存記錄,這裡的TextBox 的Enabled屬性設置為False.
3 "編輯"按鈕響應代碼:
Private Sub CommandButton5_Click() '編輯
MsgBox ("請修改記錄!")
UserForm1.TextBox2.Enabled = True
UserForm1.TextBox3.Enabled = True
UserForm1.CommandButton6.Enabled = True '保存記錄
End Sub
代碼解釋: 點擊"編輯"按鈕後彈出對話框,要求和用戶确認,得到認可後把TextBox2.Enabled,TextBox3.Enabled, CommandButton6.Enabled的屬性修改為True,這時就用戶可以編輯了與保存了。
4 "保存"按鈕響應代碼:
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
代碼解釋:保存的時候有兩種情況:一個是後面講到的的錄入數據後的保存;一個是修改記錄的保存,兩者的有所區别,這裡是用TextBox1.Enabled的屬性作為判斷的依據,保存的代碼是rsADO.Update
.這裡要特别注意的是數據庫在連接時的設置:imex=0。
4 在"開始"按鈕中相關代碼:
If Right(Application.Caller, 1) = 5 Then '編輯記錄
UserForm1.CommandButton1.Enabled = True
UserForm1.CommandButton4.Enabled = True
UserForm1.CommandButton5.Enabled = True
End If
代碼解釋: 當按下"開始"按鈕後的按鈕1、4、5才能響應動作。
下面看代碼的截圖:
代碼的運行:
1
今日内容回向:
1 如何實現記錄的編輯和保存?
2 連接ADO連接EXCEL中,為了實現編輯和保存要進行什麼設置?
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!