用窗体来实现是自找麻烦,我给你简化一下,直接在工作表中做,代码如下:
'thisworkbook模块 Private Sub Workbook_Open() Sheet1.[DATASOR].ClearContents oCNN.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ThisWorkbook.Path & "\学生.mdb;" Application.EnableEvents = False oRST.Open "select 班级 from 成绩 group by 班级", oCNN, adOpenKeyset, adLockPessimistic For i = 1 To oRST.RecordCount Sheet1.ComboBox1.AddItem oRST.Fields("班级") oRST.MoveNext Next oRST.Close Sheet1.ComboBox1.Text = "" Application.EnableEvents = True End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) oCNN.Close End Sub 'sheet1模块 Private Sub ComboBox1_Change() Application.EnableEvents = False [DATASOR].ClearContents If oRST.State = 1 Then oRST.ActiveCommand.CommandText = "select 姓名,语文,数学,英语,总分 from 成绩 where 班级=""" & Me.ComboBox1.Value & """" oRST.Requery Else oRST.Open "select 姓名,语文,数学,英语,总分 from 成绩 where 班级=""" & Me.ComboBox1.Value & """", oCNN, adOpenKeyset, adLockPessimistic End If Range("A3").CopyFromRecordset oRST Application.EnableEvents = True End Sub '模块1 Public oCNN As New ADODB.Connection Public oRST As New ADODB.Recordset Dim Lrow As Long Sub Cal() Lrow = Range("E2").End(xlDown).Row If Lrow > 2 And Lrow <> 65536 Then Range("E3:E" & Lrow).Formula = "=sum(B3:D3)" End If End Sub Sub Refresh() Lrow = Range("E2").End(xlDown).Row If Lrow > 2 And Lrow <> 65536 And oRST.State = 1 Then oRST.MoveFirst For i = 3 To Lrow oRST.Fields("总分") = Cells(i, 5) oRST.Update oRST.MoveNext Next MsgBox "数据存入完毕!" End If End Sub |
|
来自: 书馆之书 > 《OFFICE学习》