大家好,我們今天繼續講解VBA數據庫解決方案,今日講解的是第77講: 工作表數據與UserForm窗口的交互:
    第一條記錄的顯示。

    從這講開始,我將利用7講的時間,給大家詳細講解一個工作表數據庫的准實例,雖然是小型的工程,但麻雀雖小,五臟俱全。一些必要的操作都有,其中還會涉及到窗體的設計,按鈕的設計等等內容,可以說,如果你需要管理的數據字段和我的例子相同的話,基本上可以不做修改就可以直接使用。由於此工程內容較多,代碼也較多,還有窗體的設計,我只能一步一步的講解,最後再展示給大家最後總的工程內容。

    好了,我們今日的內容是實現工作表內容如何體現在UserForm窗口,先實現第一條記錄的體現。

    思路:
    ① 首先建立一個UserForm窗口,然後在上面設計文本框用於裝載數據,按鈕用於指令的下達。

    ② 在彈出UserForm窗口後,EXCEL文件要隱藏。

    ③ 由於我的窗體中會陸續增加很多按鈕,要根據實際的要求,每次起作用的按鈕不一樣。

    下面是工作表的數據:
    image.png
    下面我們來實現我們的目的:

    首先建立一個窗口,由於我的設計時一次調試完成的,本講只講解本講涉及到的內容,窗口如下:
    image.png
    下面看我的代碼:

    1 進入交互窗體界面:

    1. Sub mynzRecords_77() '將工作表數據變成記錄集,並將第一條數據顯示到UserForm窗口
    2. Application.Visible = False
    3. UserForm1.Show
    4. End Sub

    2 推出按鈕的代碼:

    1. Private Sub CommandButton2_Click() '退出
    2. Unload Me
    3. Application.Visible = True
    4. End Sub

    3 開始按鈕的代碼:

    1. Private Sub CommandButton3_Click() '開始按鈕
    2. Dim cnADO, rsADO As Object
    3. Dim strPath, strSQL As String
    4. Set cnADO = CreateObject("ADODB.Connection")
    5. Set rsADO = CreateObject("ADODB.Recordset")
    6. strPath = ThisWorkbook.FullName
    7. cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';" _
    8. & "data source=" & strPath
    9. strSQL = "SELECT * FROM [數據7$]"
    10. rsADO.Open strSQL, cnADO, 1, 3
    11. If rsADO.RecordCount > 0 Then
    12. rsADO.MoveFirst
    13. UserForm1.TextBox1.Value = rsADO.Fields(0)
    14. UserForm1.TextBox2.Value = rsADO.Fields(1)
    15. UserForm1.TextBox3.Value = rsADO.Fields(2)
    16. End If
    17. rsADO.Close
    18. cnADO.Close
    19. Set rsADO = Nothing
    20. Set cnADO = Nothing
    21. If Right(Application.Caller, 1) = 2 Then '下一條
    22. UserForm1.CommandButton1.Enabled = True
    23. End If
    24. If Right(Application.Caller, 1) = 3 Then '最後一條
    25. UserForm1.CommandButton4.Enabled = True
    26. End If
    27. If Right(Application.Caller, 1) = 5 Then '編輯記錄
    28. UserForm1.CommandButton1.Enabled = True
    29. UserForm1.CommandButton4.Enabled = True
    30. UserForm1.CommandButton5.Enabled = True
    31. End If
    32. If Right(Application.Caller, 1) = 8 Then '刪除
    33. UserForm1.CommandButton1.Enabled = True
    34. UserForm1.CommandButton4.Enabled = True
    35. UserForm1.CommandButton8.Enabled = True '刪除記錄
    36. End If
    37. End Sub
    1. Private Sub UserForm_Activate()
    2. UserForm1.CommandButton2.SetFocus
    3. If Right(Application.Caller, 1) = 1 Then '第一條記錄顯示
    4. UserForm1.CommandButton1.Enabled = False '下一條記錄
    5. UserForm1.CommandButton4.Enabled = False '最後一條記錄
    6. UserForm1.CommandButton5.Enabled = False '編輯記錄
    7. UserForm1.CommandButton7.Enabled = False '查找記錄
    8. UserForm1.CommandButton8.Enabled = False '刪除記錄
    9. UserForm1.CommandButton6.Enabled = False '保存記錄
    10. UserForm1.CommandButton9.Enabled = False '錄入記錄
    11. End If
    12. If Right(Application.Caller, 1) = 2 Then '下一條記錄
    13. UserForm1.CommandButton1.Enabled = False '下一條記錄
    14. UserForm1.CommandButton4.Enabled = False '最後一條記錄
    15. UserForm1.CommandButton5.Enabled = False '編輯記錄
    16. UserForm1.CommandButton7.Enabled = False '查找記錄
    17. UserForm1.CommandButton8.Enabled = False '刪除記錄
    18. UserForm1.CommandButton6.Enabled = False '保存記錄
    19. UserForm1.CommandButton9.Enabled = False '錄入記錄
    20. End If
    21. If Right(Application.Caller, 1) = 3 Then '顯示最後記錄
    22. UserForm1.CommandButton1.Enabled = False '下一條記錄
    23. UserForm1.CommandButton4.Enabled = False '最後一條記錄
    24. UserForm1.CommandButton5.Enabled = False '編輯記錄
    25. UserForm1.CommandButton7.Enabled = False '查找記錄
    26. UserForm1.CommandButton8.Enabled = False '刪除記錄
    27. UserForm1.CommandButton6.Enabled = False '保存記錄
    28. UserForm1.CommandButton9.Enabled = False '錄入記錄
    29. End If
    30. If Right(Application.Caller, 1) = 5 Then '顯示編輯記錄
    31. UserForm1.CommandButton1.Enabled = False '下一條記錄
    32. UserForm1.CommandButton4.Enabled = False '最後一條記錄
    33. UserForm1.CommandButton5.Enabled = False '編輯記錄
    34. UserForm1.CommandButton7.Enabled = False '查找記錄
    35. UserForm1.CommandButton8.Enabled = False '刪除記錄
    36. UserForm1.CommandButton6.Enabled = False '保存記錄
    37. UserForm1.CommandButton9.Enabled = False '錄入記錄
    38. UserForm1.TextBox1.Enabled = False
    39. UserForm1.TextBox2.Enabled = False
    40. UserForm1.TextBox3.Enabled = False
    41. End If
    42. If Right(Application.Caller, 1) = 6 Then '錄入
    43. UserForm1.CommandButton3.Enabled = False '開始
    44. UserForm1.CommandButton1.Enabled = False '下一條記錄
    45. UserForm1.CommandButton4.Enabled = False '最後一條記錄
    46. UserForm1.CommandButton5.Enabled = False '編輯記錄
    47. UserForm1.CommandButton7.Enabled = False '查找記錄
    48. UserForm1.CommandButton8.Enabled = False '刪除記錄
    49. UserForm1.CommandButton6.Enabled = False '保存記錄
    50. End If
    51. If Right(Application.Caller, 1) = 7 Then '查找
    52. UserForm1.CommandButton3.Enabled = False '開始
    53. UserForm1.CommandButton1.Enabled = False '下一條記錄
    54. UserForm1.CommandButton4.Enabled = False '最後一條記錄
    55. UserForm1.CommandButton5.Enabled = False '編輯記錄
    56. 'UserForm1.CommandButton7.Enabled = False '查找記錄
    57. UserForm1.CommandButton8.Enabled = False '刪除記錄
    58. UserForm1.CommandButton6.Enabled = False '保存記錄
    59. UserForm1.CommandButton9.Enabled = False '錄入記錄
    60. UserForm1.TextBox2.Enabled = False
    61. UserForm1.TextBox3.Enabled = False
    62. End If
    63. If Right(Application.Caller, 1) = 8 Then '刪除
    64. ' UserForm1.CommandButton3.Enabled = False '開始
    65. UserForm1.CommandButton1.Enabled = False '下一條記錄
    66. UserForm1.CommandButton4.Enabled = False '最後一條記錄
    67. UserForm1.CommandButton5.Enabled = False '編輯記錄
    68. UserForm1.CommandButton7.Enabled = False '查找記錄
    69. UserForm1.CommandButton8.Enabled = False '刪除記錄
    70. UserForm1.CommandButton6.Enabled = False '保存記錄
    71. UserForm1.CommandButton9.Enabled = False '錄入記錄
    72. UserForm1.TextBox1.Enabled = False
    73. UserForm1.TextBox2.Enabled = False
    74. UserForm1.TextBox3.Enabled = False
    75. End If
    76. End Sub

    代碼截圖:
    image.png
    image.png
    image.png
    image.png
    代碼重點講解:

    1 上述代碼實現了窗體和工作表數據的交互,將工作表數據顯示在窗體上。

    2 Application.Visible = False

    UserForm1.Show

    點擊進入窗體時,EXCEL文件隱藏不可用,窗體出現。

    3 Unload Me

    Application.Visible = True

    當窗體退出時,EXCEL文件可用。

    4 rsADO.Open strSQL, cnADO, 1, 3

    1. If rsADO.RecordCount > 0 Then
    2. rsADO.MoveFirst
    3. UserForm1.TextBox1.Value = rsADO.Fields(0)
    4. UserForm1.TextBox2.Value = rsADO.Fields(1)
    5. UserForm1.TextBox3.Value = rsADO.Fields(2)
    6. End If

    當點擊開始時,會建立工作表ADO的連接,同時記錄集打開工作表,記錄移動到第一條,TextBox1顯示不同的字段。

    下面看代碼的運行:
    image.png
    image.png
    image.png
    今日內容回向:

    1 如何控制窗體的顯示出不同的可用按鈕?

    2 為了顯示記錄集,要把記錄的各個字段賦值給窗口的哪個控件?