excel2007中使用sql語句
補充說明:請問excel2007中有沒有辦法使用sql語句生成數(shù)據(jù)表 比如有一張sheet2是明細(xì)表 我想用一句sql語句 把select出來的數(shù)據(jù)顯示在sheet1 具體如何操作呢
我聽說是可以的 但是找不到這個功能
標(biāo)準(zhǔn)SQL查找代碼:
Sub SQL_Excel_2003_2007()
'On Error Resume Next '如果出現(xiàn)錯誤,忽略,然后執(zhí)行下一行代碼。
Application.ScreenUpdating = False '關(guān)閉屏幕刷新,成對出現(xiàn),提高速度
Application.DisplayAlerts = False '關(guān)閉提示,,成對出現(xiàn),避免出現(xiàn)提示框
------------------------ 參數(shù)聲明部分 -------------------
Dim cnn, SQL$ '定義數(shù)據(jù)庫連接和SQL語句
Set cnn = CreateObject("adodb.connection") '創(chuàng)建數(shù)據(jù)庫連接
Set rs = CreateObject("adodb.recordset") '創(chuàng)建一個數(shù)據(jù)集保存數(shù)據(jù)
----------------------- 設(shè)置數(shù)據(jù)庫連接 -------------------
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
'將EXCEL文件作為數(shù)據(jù)庫連接,實際并不打開EXCEL,
'Excel2003版本:cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.Path & "\數(shù)據(jù)表.xls"
'Excel2007版本:cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.Path & "\數(shù)據(jù)表.xlsx"
帶參數(shù)的連接字符串:cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;HDR=yes;IMEX=2';data source=" & ThisWorkbook.FullName
HDR=Yes 代表 Excel 檔中的工作表第一行是標(biāo)題欄,標(biāo)題只能是一行,不能使多行,或者合并的單元格。
HDR=no 工作表第一行就是數(shù)據(jù)了,沒有標(biāo)題欄,不使用欄位,則欄位就以f代表,第一列列名就是:f1,第二列列名:f2
IMEX 匯入模式 0 只讀 1 只寫 2 可讀寫
當(dāng) IMEX=0 時為“匯出模式”,這個模式開啟的 Excel 檔案只能用來做“寫入”用途。 當(dāng) IMEX=1 時為“匯入模式”,這個模式開啟的 Excel 檔案只能用來做“讀取”用途。 當(dāng) IMEX=2 時為“連結(jié)模式”,這個模式開啟的 Excel 檔案可同時支援“讀取”與“寫入”用途。
Data Source 存儲查詢數(shù)據(jù)來源的工作薄名稱,數(shù)據(jù)庫路徑為:數(shù)據(jù)表.xls 或本表:& ThisWorkbook.FullName
---------------------- 設(shè)置SQL語句 -------------------
SQL = "select * from [數(shù)據(jù)表_1$A1:G100] where 姓名='馬拉多納'"
'在Sheet1表內(nèi)查找列名為:姓名 中所有:馬拉多納 的數(shù)據(jù)。
'[XXX$A2:G100]的中括號和$為特別數(shù)據(jù)表標(biāo)示符,XXX為Sheet名,A2:G100是選取的區(qū)域。
'SQL語句是一個字符串,雙引號開頭和結(jié)尾,列名兩邊無單引號,表示一個字符串:‘馬拉多納’,要用單引號擴(kuò)上,數(shù)字就不用了。
'Nu=36: AA="馬拉多納": set Sh=Sheet1: SQL = "select * from [" & Sh.name & “$] where 姓名=‘” & AA & “’ and 年齡=Nu"
----------------------- SQL結(jié)果處理 -------------------
Set rs = cnn.Execute(SQL) '將SQL語句獲得的數(shù)據(jù)傳遞給數(shù)據(jù)集
Sheets("結(jié)果").Cells.ClearContents '清理保存數(shù)據(jù)的區(qū)域
Sheets("結(jié)果").Range("a2").CopyFromRecordset rs '將數(shù)據(jù)集粘貼到Excel中,左上角為A2,無列名。
'Sheets("結(jié)果").Range("b2").CopyFromRecordset cnn.Execute(SQL) '可以不聲明Y,直接使用
cnn.Close '關(guān)閉數(shù)據(jù)庫連接
Set cnn = Nothing '將CNN從內(nèi)存中刪除。
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub '這就是最簡單的EXCEL中SQL的應(yīng)用 ,其他的都是SQL的運用了 。
Sub SQL_Excel_2003_2007()
'On Error Resume Next '如果出現(xiàn)錯誤,忽略,然后執(zhí)行下一行代碼。
Application.ScreenUpdating = False '關(guān)閉屏幕刷新,成對出現(xiàn),提高速度
Application.DisplayAlerts = False '關(guān)閉提示,,成對出現(xiàn),避免出現(xiàn)提示框
------------------------ 參數(shù)聲明部分 -------------------
Dim cnn, SQL$ '定義數(shù)據(jù)庫連接和SQL語句
Set cnn = CreateObject("adodb.connection") '創(chuàng)建數(shù)據(jù)庫連接
Set rs = CreateObject("adodb.recordset") '創(chuàng)建一個數(shù)據(jù)集保存數(shù)據(jù)
----------------------- 設(shè)置數(shù)據(jù)庫連接 -------------------
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
'將EXCEL文件作為數(shù)據(jù)庫連接,實際并不打開EXCEL,
'Excel2003版本:cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.Path & "\數(shù)據(jù)表.xls"
'Excel2007版本:cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.Path & "\數(shù)據(jù)表.xlsx"
帶參數(shù)的連接字符串:cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;HDR=yes;IMEX=2';data source=" & ThisWorkbook.FullName
HDR=Yes 代表 Excel 檔中的工作表第一行是標(biāo)題欄,標(biāo)題只能是一行,不能使多行,或者合并的單元格。
HDR=no 工作表第一行就是數(shù)據(jù)了,沒有標(biāo)題欄,不使用欄位,則欄位就以f代表,第一列列名就是:f1,第二列列名:f2
IMEX 匯入模式 0 只讀 1 只寫 2 可讀寫
當(dāng) IMEX=0 時為“匯出模式”,這個模式開啟的 Excel 檔案只能用來做“寫入”用途。 當(dāng) IMEX=1 時為“匯入模式”,這個模式開啟的 Excel 檔案只能用來做“讀取”用途。 當(dāng) IMEX=2 時為“連結(jié)模式”,這個模式開啟的 Excel 檔案可同時支援“讀取”與“寫入”用途。
Data Source 存儲查詢數(shù)據(jù)來源的工作薄名稱,數(shù)據(jù)庫路徑為:數(shù)據(jù)表.xls 或本表:& ThisWorkbook.FullName
---------------------- 設(shè)置SQL語句 -------------------
SQL = "select * from [數(shù)據(jù)表_1$A1:G100] where 姓名='馬拉多納'"
'在Sheet1表內(nèi)查找列名為:姓名 中所有:馬拉多納 的數(shù)據(jù)。
'[XXX$A2:G100]的中括號和$為特別數(shù)據(jù)表標(biāo)示符,XXX為Sheet名,A2:G100是選取的區(qū)域。
'SQL語句是一個字符串,雙引號開頭和結(jié)尾,列名兩邊無單引號,表示一個字符串:‘馬拉多納’,要用單引號擴(kuò)上,數(shù)字就不用了。
'Nu=36: AA="馬拉多納": set Sh=Sheet1: SQL = "select * from [" & Sh.name & “$] where 姓名=‘” & AA & “’ and 年齡=Nu"
----------------------- SQL結(jié)果處理 -------------------
Set rs = cnn.Execute(SQL) '將SQL語句獲得的數(shù)據(jù)傳遞給數(shù)據(jù)集
Sheets("結(jié)果").Cells.ClearContents '清理保存數(shù)據(jù)的區(qū)域
Sheets("結(jié)果").Range("a2").CopyFromRecordset rs '將數(shù)據(jù)集粘貼到Excel中,左上角為A2,無列名。
'Sheets("結(jié)果").Range("b2").CopyFromRecordset cnn.Execute(SQL) '可以不聲明Y,直接使用
cnn.Close '關(guān)閉數(shù)據(jù)庫連接
Set cnn = Nothing '將CNN從內(nèi)存中刪除。
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub '這就是最簡單的EXCEL中SQL的應(yīng)用 ,其他的都是SQL的運用了 。

熱門搜索
- 2018-07-318月8號成都出發(fā)去色達(dá),自駕游,有2個位置可以結(jié)伴
- 2018-07-31這地方熱嗎?莫干山不錯的,下渚湖怎樣熱不熱
- 2018-07-31兒童超過120m要買票嗎
- 2018-07-31準(zhǔn)備去大理旅游三天,從昆明出發(fā) 求大神推薦路線
- 2018-07-31從廈大學(xué)生公寓到南普陀寺怎么走,要多長時間到?
- 2018-07-31問一哈從宜賓到濟(jì)南,怎么走最劃算