Monthly Archives: February 2011

excel中的VBA连接Access查询更新数据

不得不承认MS的Office系列的确是办公室的王道,营业部里面巨多的表格和数据都是Excel格式的,小批量的例如算五险一金之类的工作手工做作还行,一旦涉及到大批量数据的操作就勉为其难了,Excel提供的那些自动化操作解决小问题还行,复杂的问题就崩溃了.其实vba连接access数据库类似于asp,不过在VBA编辑器中要先倒入ADO模块,”工具”-“引用”,选择ADO2.0 library即可.

Public Sub ADOTest1()
    Dim cnn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strCnn As String
    Dim i As Long
    '首先选择第二个sheet作为目前要编辑的sheet,如果你要编辑第一个把2改成1即可
    Set Sheet = Worksheets(2)
    '选择当前目录下的db.mdb为数据库文件
    strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
             "Data Source=" & ThisWorkbook.Path & "\db.mdb;"
    cnn.Open strCnn

    For i = 1 To 16

        For n = 0 To 430

           num = n * 16 + i
           '因为刚才已经选择了第二个sheet作为目前工作表
           sdate = Sheet.Cells(num, 10)
           'sheet.cells(x,y).value 代表地x列,y行的内容的value,注意这里x和y都必须是数字,尤其y不能是字母,否则就越界了
           sfzh = Sheet.Cells(num, 14)
           'ssql = "Select * From shiye where sfzh='" & CStr(sfzm) & "'"
           ssql = "Select * From shiye where sfzh='" + CStr(sfzh) + "' and sdate='" + CStr(sdate) + "'"
           rs.Open ssql, cnn, adOpenForwardOnly, adLockReadOnly
           If Not rs.EOF Then
           shuier = rs.Fields("shuier").Value
           Sheet.Cells(num, 12).Value = shuier
           End If
           rs.Close
        Next n
    Next i
    cnn.Close
End Sub

这样的任务要是手工做的话,至少要干一星期.呵呵