分享

[求助][求助]sgz: 进一步把EXCEL与ACCESS关联

 书馆之书 2011-07-09
用窗体来实现是自找麻烦,我给你简化一下,直接在工作表中做,代码如下:


'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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多