今日讲解的内容为如何建立一个数据库的连接,利用这个连接从数据库中查到有用的记录,并填在表格中。
我们要先打开一个工作表,它的A列数值为要在数据库中查询的字段,并把数据库中此字段的其他内容填充到这个工作表中的B:G列的位置。好我们先看下面的代码,在代码的过程中均有详细的讲解。有的容易些,有的难懂些,不过都没关系,有兴趣的读者可以仔细地琢磨,都是一步一步看过来的。我在学VBA的时候,资料还很少很少,有的需要自己的摸索。待这个平台的资料多些了,也希望能有位大侠给出本书,利于大家的学习。
1 Dim myData As String, myTable As String
2 Dim wb As Workbook
3 Dim ws As Worksheet
4 Dim i As Long, j As Long
5
6
7 Dim cnn As ADODB.Connection
8 Dim rs As ADODB.Recordset
9 Set wb = ThisWorkbook '指定工作簿
10 Set ws = wb.Sheets("A-RR") '指定工作表名称
11 Dim APPPATH
12 APPPATH = ActiveWorkbook.Path '& "\" '路径名称
13 ChDir APPPATH
14 myData = "D:\RR" & "\myData.mdb" '指定新数据库名称(完整路径)
15 myTable = "RR资料" '指定数据库的数据表名称
'检查是否已经存在同名数据库文件
16 If Dir(myData) = "" Then
17 MsgBox (myData & "不存在!")
'不存在的情况下,释放变量,退出
18 Set wb = Nothing
19 Set ws = Nothing
20 Set rs = Nothing
21
22
23 Set cnn = Nothing
24 End
25 Else
'如果已经存在了数据库文件,就检查是否存在数据表
'建立与数据库的连接
26 Set cnn = New ADODB.Connection
27 With cnn
28 .Provider = "microsoft.jet.oledb.4.0"
29 .Open myData
30 End With
'开始查询是否存在该数据表
31 Set rs = cnn.OpenSchema(adSchemaTables)
32 Do Until rs.EOF
33 If LCase(rs!table_name) = LCase(myTable) Then GoTo hhh '如果查到则退出循环
'继续查询
34 rs.MoveNext
35 Loop
'释放变量,退出(这是没有查到的情况)
36 Set wb = Nothing
37 Set ws = Nothing
38 Set rs = Nothing
39
40
41 Set cnn = Nothing
42 MsgBox ("不存在此工作表!")
43 End
hhh:
44 End If
'到此是找到了某个记录,并打开了数据库
45 Sheets("A-RR").Select
46 Range("B2:G3000").Clear '做填充数据的准备
47 Set rs = New ADODB.Recordset
48 t = 2
49 Do While Cells(t, 1) <> ""
50 Cells(t, 1).Select
51 Sql = "select * from " & myTable _
52 & " where RR = " & " '" & ws.Cells(t, 1).Value & "'"
53 rs.Open Sql, cnn, adOpenKeyset, adLockOptimistic
54 If rs.RecordCount = 0 Then
'如果数据库中没有工作表的某行数据,就
55 ws.Cells(t, 2).Value = "No Find"
56 ws.Cells(t, 3).Value = "No Find"
57 Else
'如果数据库中有工作表的某行数据,就将数据进行更新
58 ws.Cells(t, 2).Value = rs.Fields(1)
59 ws.Cells(t, 3).Value = rs.Fields(2)
60 End If
61 rs.Close '关闭,此处的RS必须要关闭,必须的。
62 t = t + 1
63 Loop
64 MsgBox "完成!", vbInformation + vbOKOnly
'关闭数据库及查询数据集
65 cnn.Close
'释放变量
66 Set wb = Nothing
67 Set ws = Nothing
68 Set rs = Nothing
69 Set myCmd = Nothing
70 Set myCat = Nothing
71 Set cnn = Nothing
看看下面的截图:
到此这项任务就完成了,利用VBA控制EXCEL是本平台的较高水平的内容,但程序的思想、思路和写函数是一致的,都要按规定的线路来进行。如果检测到没有按照自己的设想来运行程序,那是绝对不可以的。关注本平台,会经常有类似大段的代码共大家参考。当然,上述的代码也是解决这类问题的一个通用的代码,读者可以使用,没问题。
分享成果,随喜正能量