日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

【VBA技巧】- 從Excel文件或Access數(shù)據(jù)庫中獲取指定列數(shù)據(jù)

 L羅樂 2017-05-24


        最近部門有一個(gè)海外客戶,需要我們提供英文的結(jié)算單,由于國內(nèi)的柜臺(tái)系統(tǒng)只有提供中文版的結(jié)算單,所以只能通過柜臺(tái)導(dǎo)出所需要的基礎(chǔ)數(shù)據(jù),然后轉(zhuǎn)換為英文版的結(jié)算單。因?yàn)榛A(chǔ)數(shù)據(jù)是csv結(jié)尾的文件,所以我就想能夠通過把csv文件導(dǎo)入到ExcelAccess中(也可以導(dǎo)入到SQL Server數(shù)據(jù)庫中),然后再獲取相應(yīng)的列數(shù)據(jù),對(duì)其進(jìn)行中英文轉(zhuǎn)換。

        具體轉(zhuǎn)換細(xì)節(jié)就不做介紹了,今天主要為大家介紹如何從Excel文件或Access數(shù)據(jù)庫中獲取指定列數(shù)據(jù)。其實(shí)微軟提供2種引擎可供在不打開Excel和Access的情況下獲取數(shù)據(jù)。分別是Microsoft.Jet.OLEDB.4.0(以下簡(jiǎn)稱 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下簡(jiǎn)稱 ACE 引擎)。

        在測(cè)試過程中,我發(fā)現(xiàn)以上兩個(gè)引擎都可以用來訪問Excel擴(kuò)展名為*.xlsm文件。但Jet引擎只能用于訪問擴(kuò)展名為.mdb的Access文件,ACE引擎既可以訪擴(kuò)展名為.mdb的Access文件,也可以訪問擴(kuò)展名為.accdb的Access文件。

        為了更加直觀的演示,我制作了一個(gè)虛擬數(shù)據(jù),數(shù)據(jù)內(nèi)容如下圖所示:



        通過上圖可以看出,Sheet1工作表中有5列11行數(shù)據(jù),如果制作的報(bào)表中只需要其中的姓名、學(xué)號(hào)、身份證以及出生日期。那該如何操作呢?其中姓名、學(xué)號(hào)和身份證3列可以直接從上圖中獲取,出生日期列需要經(jīng)過截取而來。

        從Excel中獲取數(shù)據(jù),可以通過以下代碼實(shí)現(xiàn),代碼如下:


''連接Excel

Sub test1()

    Dim conn As New Connection

    Set rs = CreateObject(''adodb.recordset'')

    

    ''conn.ConnectionString = ''Provider=Microsoft.ACE.OLEDB.12.0;Data Source='' & ThisWorkbook.Path & ''\'' & ThisWorkbook.Name & '';Extended Properties=''Excel 12.0 Xml;HDR=YES''''

    conn.ConnectionString = ''provider=microsoft.jet.oledb.4.0; extended properties=''excel 8.0;hdr=yes;imex=2'';data source='' & ThisWorkbook.FullName

    conn.Open

    Sql = ''select 姓名, 學(xué)號(hào), 身份證, mid(身份證,7,8) as 出生日期 from [Sheet1$]''

    

    ''填寫新表的列名稱

    rs.Open Sql, conn, 1, 3

    For i = 0 To rs.Fields.Count - 1

        Worksheets(''Sheet2'').Cells(1, i 1) = rs.Fields(i).Name

    Next

    ''把查詢的結(jié)果集放入到A2單元格區(qū)域

    Worksheets(''Sheet2'').Range(''A1'').Offset(1, 0).CopyFromRecordset conn.Execute(Sql)

    

    rs.Close

    conn.Close

    Set rs = Nothing

    Set conn = Nothing

End Sub


        核心的代碼就是使用Jet和ACE引擎,上段代碼的作用是從當(dāng)前打開的工作簿Sheet1工作表中獲取姓名、學(xué)號(hào)、身份證以及出生日期信息。其中出生日期信息通過對(duì)身份證列進(jìn)行mid截取,再把得到的列通過as關(guān)鍵詞變更列名為出生日期。


        上面的代碼放入模塊后,按下F5或點(diǎn)擊綠色圖標(biāo)會(huì)提示如下錯(cuò)誤(如果正常運(yùn)行請(qǐng)忽略,第一次使用會(huì)出現(xiàn)):



        出現(xiàn)上圖的錯(cuò)誤是由于Excel VBE中未引用相應(yīng)的Library,可以通過【工具】→【引用】,勾選類似【Microsoft ActiveX Data Objects *.*】并點(diǎn)擊確定。我這里是Microsoft ActiveX Data Objects 6.1,根據(jù)各位小伙伴安裝的Office版本的不同,版本號(hào)也會(huì)不同。



        前期準(zhǔn)備完成后,我們一起來看看該段代碼如何運(yùn)作的,詳見如下動(dòng)態(tài)圖



        其實(shí)對(duì)于conn.ConnectionString也可以使用ACE引擎,把Jet引擎注釋掉即可,可以獲得同樣的效果。


        為了充分演示Jet和ACE引擎,我特地建立了2個(gè)Access文件,除了文件格式不一樣外,里面的數(shù)據(jù)都是一樣的,如下圖所示:



        為了演示Jet和ACE引擎的區(qū)別,如下動(dòng)態(tài)圖分別使用ACE和Jet引擎來連接.accdb和.mdb文件,效果如下:



        通過對(duì)比,可以發(fā)現(xiàn)使用ACE引擎可以連接.accdb和.mdb文件,但Jet引擎只能連接.mdb文件,當(dāng)連接.accdb文件的時(shí)候,提示不可識(shí)別的數(shù)據(jù)庫格式,如下圖所示:



        通過上面的介紹,已經(jīng)能夠從導(dǎo)出的數(shù)據(jù)中有條件的篩選出所需要的列數(shù)據(jù),然后需要做的就是對(duì)其進(jìn)行中文翻譯英文即可。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多