經(jīng)常數(shù)據(jù)庫际跪,Excel兩邊跑?別費勁了喉钢,VBA一鍵搞定

累成狗.jpg

在日常工作當中姆打,很多人每天的任務就是做表做表做表,而表格數(shù)據(jù)又得從數(shù)據(jù)庫中去查找肠虽,然后查詢出來的數(shù)據(jù)導出為Excel文件幔戏,然后再在Excel里面用函數(shù),數(shù)據(jù)透視表做著以往每天都要做的內(nèi)容税课。實話說闲延,既費時,又苦逼了自己韩玩。
其實這些重復性工作完全可以通過VBA去實現(xiàn)垒玲。
這篇文章就是想展示怎么樣利用VBA鏈接MySQL數(shù)據(jù)庫進行查詢的。

因為我們是通過ODBC和ADO方式進行連接的找颓,所以b在此之前必須保證對電腦進行以下的配置

1侍匙、VBA連接MySQL前的環(huán)境配置

1.1首先你電腦上安裝了MySQL
1.2啟用腳本支持
在使用前,需要先在VBE窗口中啟動數(shù)據(jù)庫連接支持叮雳。在菜單欄選擇“工具”-“引用”,在彈出的引用窗口中妇汗,找到"Microsoft
ActiveX Data Objects 6.1 Library"和"Microsoft ActiveX Data Objects
Recordset 6.0 Library"帘不,把前面的框勾選上,點擊確定即可杨箭。
1.3安裝mysql ODBC連接服務
下載地址:Download Connector/ODBC

這里有一點要注意的是寞焙,如果mysql安裝的是5.5版本的,Connector/ODBC應該安裝5.1版本互婿。如果數(shù)據(jù)庫安裝的是5.7版本的捣郊,Connector/ODBC可以安裝5.3版本的,其他版本的數(shù)據(jù)庫應該安裝什么版本的Connector/ODBC慈参,因為沒用過呛牲,所以不清楚。至于是安裝32位的還是64位的驮配,并不是看你電腦位數(shù)娘扩,而是看你安裝的mysql是什么位數(shù)的着茸。

1.4.添加ODBC數(shù)據(jù)源

打開“控制面板”-“管理工具”-“ODBC 數(shù)據(jù)源”,在彈出的窗口中的“用戶DSN”選項卡右側琐旁,選擇“添加”涮阔,如果是5.3版本的,在新數(shù)據(jù)庫源中會出現(xiàn)兩個MySQL驅(qū)動灰殴,分別為“MySQLODBC 5.3 ANSI Driver”及"MySQL ODBC 5.3 Unicode Driver"敬特,很明顯兩者的區(qū)別在于編碼標準。選中其中一個牺陶,點完成即可伟阔。如果是5.1版本的,那出現(xiàn)的會是MySQL ODBC 5.1 Driver

(圖1)用戶DSN
(圖2)驅(qū)動程序里查看是否正確安裝了ODBC Connect

已上環(huán)境配置好之后就可以進行在VBE窗口里面寫代碼了

2. VBA連接MySQL并執(zhí)行簡單查詢

Sub importFromMySQL()
    Dim conn As Object
    Dim rs As Object
    Set conn = CreateObject("adodb.connection")
    With conn
        .ConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;DB=train;UID=root;PWD=123456;OPTION=3;Stmt=set names GBK"
        .Open
    End With
    
    Sql = "select * from orders"
    
   
    Set rs = conn.Execute(Sql)
    For i = 1 To rs.Fields.Count
        Cells(1, i) = rs.Fields(i - 1).Name
    Next i
    Range("a2").CopyFromRecordset rs
    
   
    rs.Close: Set rs = Nothing
    
    conn.Close: Set conn = Nothing
    
End Sub

接下來詳細解釋一下這段代碼的思路含義:

1 最開頭要對我們之后要用到的變量對象定義
Dim i As Integer     #將i定義為整型數(shù)據(jù)
Dim conn As Object    #將conn定義為對象
Dim rs As Object   #將rs定義為對象
Dim Sql As String   #將Sql定義為字符型
2 接下來要創(chuàng)建一個對象义图,即數(shù)據(jù)庫連接對象
Set conn = CreateObject("ADODB.Connection")  #數(shù)據(jù)庫連接對象
3 第三步是要創(chuàng)建一個連接字符串减俏,因為我們平時登錄MySQL也是需要什么密碼啊,用戶名之類的碱工。連接字符串的功能就相當于我們寫的登錄MySQL的語句娃承。
With conn
        .ConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;DB=train;UID=root;PWD=123456;OPTION=3;Stmt=set names GBK"
        .Open  '相當于conn.open,即用open將conn和數(shù)據(jù)庫相連
    End With
參數(shù) 默認值 注釋
uid ODBC (on Windows) 用于鏈接至MySQL的用戶名怕篷。
server localhost MySQL服務器的主機名历筝。
database(DB) 數(shù)據(jù)庫。
port 3306 如果服務器不是本地主機將要使用的TCP/IP端口廊谓。
pwd 服務器上用戶賬戶的密碼梳猪。
DRIVER MySQL的驅(qū)動程序
OPTION 用于指定ODBC Connector的工作方式的
  • DRIVER是MySQL的驅(qū)動程序,這個驅(qū)動程序的版本名稱怎么寫得看自己電腦上管理工具里的ODBC數(shù)據(jù)源-驅(qū)動程序,具體看圖2
  • OPTION蒸痹,按MySQL官方的說法是用于指定ODBC Connector的工作方式的春弥,但是我在他們官方文檔中并沒有找到有哪個選項是的值對應是3的。所以這里只有照寫了叠荠。但是經(jīng)過測試匿沛,好像是代表前三次能夠正常查詢,以后的查詢結果好像都跟第3次一樣榛鼎,讀者可以自己去測試一下逃呼。
  • server 數(shù)據(jù)庫服務器的計算機名字,或者IP。如果本機是服務器,設置為Localhost或127.0.0.1者娱。
  • 其他的database抡笼,UID,pwd相信大家都看得懂黄鳍,我就不細說了
4 第四步 推姻,寫上自己的sql語句

Sql = "select * from orders"

  • from 后面的表是要你在用戶DSN設置的時候選的數(shù)據(jù)庫中的表
5 第五步:執(zhí)行sql語句,并將加過返回到excel中
Set rs = conn.Execute(Sql) '用于執(zhí)行SQL語句并接收查詢語句返回的結果集框沟,rs對象即為adodb.recordset對象
For i = 1 To rs.Fields.Count  #查詢結果字段名的個數(shù)
        Cells(1, i) = rs.Fields(i - 1).Name  #將字段名賦值給第一行第一列至第一行第rs.Fields.Count列的單元格
Next i
Range("a2").CopyFromRecordset rs  #將查詢結果通過CopyFromRecordset這個方法存到在Excel表中拾碌,以A2單元格為開頭

6 第六步吐葱,關閉和釋放rs和conn兩個對象
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing

至此,一個相對簡單的VBA連接數(shù)據(jù)庫并查詢的代碼就算完成了校翔。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弟跑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子防症,更是在濱河造成了極大的恐慌孟辑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔫敲,死亡現(xiàn)場離奇詭異饲嗽,居然都是意外死亡,警方通過查閱死者的電腦和手機奈嘿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門貌虾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人裙犹,你說我怎么就攤上這事尽狠。” “怎么了叶圃?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵袄膏,是天一觀的道長。 經(jīng)常有香客問我掺冠,道長沉馆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任德崭,我火速辦了婚禮斥黑,結果婚禮上,老公的妹妹穿的比我還像新娘眉厨。我一直安慰自己心赶,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布缺猛。 她就那樣靜靜地躺著,像睡著了一般椭符。 火紅的嫁衣襯著肌膚如雪荔燎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天销钝,我揣著相機與錄音有咨,去河邊找鬼。 笑死蒸健,一個胖子當著我的面吹牛座享,可吹牛的內(nèi)容都是我干的婉商。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼渣叛,長吁一口氣:“原來是場噩夢啊……” “哼丈秩!你這毒婦竟也來了?” 一聲冷哼從身側響起淳衙,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蘑秽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后箫攀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肠牲,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年靴跛,在試婚紗的時候發(fā)現(xiàn)自己被綠了缀雳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡梢睛,死狀恐怖肥印,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扬绪,我是刑警寧澤竖独,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站挤牛,受9級特大地震影響莹痢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜墓赴,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一竞膳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诫硕,春花似錦坦辟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至藕届,卻和暖如春挪蹭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背休偶。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工梁厉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人踏兜。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓词顾,卻偏偏與公主長得像八秃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肉盹,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容