【分享成果,随喜正能量】 窮不失義,達不離道。人生總有順境、逆境,但無論什麼時候,都不要背棄心中的仁義,有義有愛,才是一個人的立世之道。。
《VBA數據庫解決方案》教程是我推出的第二套教程,目前已經是第一版修訂了。這套教程定位于中級,是學完字典後的另一個專題講解。數據庫是數據處理的利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,教程第一版的修訂内容主要是完成所有程序文件的32位和64位OFFICE系統測試。
這套教程共兩冊,八十四講,今後一段時間會給大家陸續推出修訂後的教程内容。今日的内容是第:ADO對多個工作表的精确查詢
大家好,今日繼續講解VBA數據庫解決方案,今日講解第40講:利用ADO實現同一文件的多個工作表精确查詢。其實這講的内容利用我之前講解的知識點也可以自己完成,這裡隻是拿出來讓大家再熟悉一下EXCEL的ADO連接,及RS多次打開記錄集後的查詢。
1 應用場景的具體分析實例:在程序文件中有兩頁“兩表查詢數據”和“查詢數據”,一些基礎的數據在這兩頁文件中:如下截圖:
同時我在某頁工作表中存在如下數據,要在上述的兩個工作表中查出對應的數據資料放在後面:
這個實例也是在工作中經常遇到的,如果擴展使用會更多。
2 實現多個工作表精确查詢的代碼及代碼解讀下面看我給出的代碼:
Sub mynzs_40()
'[代碼見教程]
End Sub
代碼截圖:
代碼講解:
1) WW = Cells(i, 1)
If InStr(WW, ":") > 0 Then WW = Left(WW, InStr(WW, ":") - 1)
此處我做了一個實例,就是如果在需要查找的數據中含有“:”那麼要取冒号之前的數據。這是非常實用的一個實例,大家要記住上面的代碼。
2) For Each SH In Worksheets 這裡使用了一個FOR EACH循環,遍曆工作表。
3) If SH.Name = "兩表查詢數據" Or SH.Name = "查詢數據" Then 由于我事先知道我要在兩頁工作表中查詢,所以我精确的控制了兩頁的工作表名稱
4) If rsADO.RecordCount > 0 Then
Cells(i, 2).CopyFromRecordset cnADO.Execute(strSQL)
GoTo 100
End If
上述代碼作用:當存在這樣的記錄,即記錄數大于0那麼提取數據。
代碼的運行:
備注:我寫這講的目的原想是能提高一下在很多的工作表中查詢時能提高程序的運行速度,但我在幾十個工作表中測試時發現運行的速度反而不如FIND的速度快,這裡隻是提供給大家一個方法吧。
今日内容回向:
1 如何實現利用ADO在多表中查詢?
2 如果用FIND來編寫上述代碼該如何寫呢?
我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中:
【分享成果,随喜正能量】 其實不認錯本身就是一個錯,認錯自己不但不會少了什麼,還會顯得你有度量,學習認錯是美好的,是人生必經的修行。。
,