vbasqlexcel數據
Ⅰ 在vba中怎麼用sql語句吧excel工作表和資料庫表連接查詢
摘要 VBA連接SQL SERVER資料庫操作Excel。
Ⅱ 用vba通過sql查詢xls文件的內容
以下內容引用於excelhome論壇。建議去論壇查看更多信息。
'在Excel中使用SQL語句總結-1:
'************************************標准SQL查找代碼:*********************************************************
SubSQL_Excel_2003_2007()
'OnErrorResumeNext'如果出現錯誤,忽略,然後執行下一行代碼。
Application.ScreenUpdating=False'關閉屏幕刷新,成對出現,提高速度
Application.DisplayAlerts=False'關閉提示,,成對出現,避免出現提示框
'---------------------------------------參數聲明部分---------------------------------------------------------
Dimcnn,SQL$'定義資料庫連接和SQL語句
Setcnn=CreateObject("adodb.connection")'創建資料庫連接
Setrs=CreateObject("adodb.recordset")'創建一個數據集保存數據
'---------------------------------------設置資料庫連接---------------------------------------------------------
cnn.Open"Provider=Microsoft.ACE.OLEDB.12.0;ExtendedProperties=Excel12.0;DataSource="&ThisWorkbook.FullName
'將EXCEL文件作為資料庫連接,實際並不打開EXCEL,
'Excel2003版本:cnn.Open"Provider=Microsoft.jet.OLEDB.4.0;ExtendedProperties=Excel8.0;DataSource="&ThisWorkbook.Path&"數據表.xls"
'Excel2007版本:cnn.Open"Provider=Microsoft.ACE.OLEDB.12.0;ExtendedProperties=Excel12.0;DataSource="&ThisWorkbook.Path&"數據表.xlsx"
'帶參數的連接字元串:cnn.Open"provider=microsoft.jet.oledb.4.0;extendedproperties='excel8.0;HDR=yes;IMEX=2';datasource="&ThisWorkbook.FullName
'HDR=Yes代表Excel檔中的工作表第一行是標題欄,標題只能是一行,不能使多行,或者合並的單元格。
'HDR=no工作表第一行就是數據了,沒有標題欄,不使用欄位,則欄位就以f代表,第一列列名就是:f1,第二列列名:f2
'IMEX匯入模式0隻讀1隻寫2可讀寫
'當IMEX=0時為「匯出模式」,這個模式開啟的Excel檔案只能用來做「寫入」用途。
'當IMEX=1時為「匯入模式」,這個模式開啟的Excel檔案只能用來做「讀取」用途。
'當IMEX=2時為「連結模式」,這個模式開啟的Excel檔案可同時支援「讀取」與「寫入」用途。
'DataSource存儲查詢數據來源的工作薄名稱,資料庫路徑為:數據表.xls或本表:&ThisWorkbook.FullName
'---------------------------------------設置SQL語句---------------------------------------------------------
SQL="select*from[數據表_1$A1:G100]where姓名='馬拉多納'"
'在Sheet1表內查找列名為:姓名中所有:馬拉多納的數據。
'[XXX$A2:G100]的中括弧和$為特別數據表標示符,XXX為Sheet名,A2:G100是選取的區域。
'SQL語句是一個字元串,雙引號開頭和結尾,列名兩邊無單引號,表示一個字元串:『馬拉多納』,要用單引號擴上,數字就不用了。
'Nu=36:AA="馬拉多納":setSh=Sheet1:SQL="select*from["&Sh.name&「$]where姓名=『」&AA&「』and年齡=Nu"
'---------------------------------------SQL結果處理---------------------------------------------------------
Setrs=cnn.Execute(SQL)'將SQL語句獲得的數據傳遞給數據集
Sheets("結果").Cells.ClearContents'清理保存數據的區域
Sheets("結果").Range("a2").CopyFromRecordsetrs'將數據集粘貼到Excel中,左上角為A2,無列名。
'Sheets("結果").Range("b2").CopyFromRecordsetcnn.Execute(SQL)'可以不聲明Y,直接使用
cnn.Close'關閉資料庫連接
Setcnn=Nothing'將CNN從內存中刪除。
'-----------------------------------------------------------------------------------------------------
Application.ScreenUpdating=True
Application.DisplayAlerts=True
EndSub'這就是最簡單的EXCEL中SQL的應用,其他的都是SQL的運用了
Ⅲ Excel 怎樣用VBA將數據導入到SQL資料庫
subtest()
Setcnn=CreateObject("ADODB.Connection")
Setrs=CreateObject("Adodb.Recordset")strCn="Provider=sqloledb;Server=R9HDET7;Database=dbname;Uid=username;Pwd=password"
cnn.OpenstrCn
SQL=""
cnn.OpenstrCn'與資料庫建立連接,如果成功,返回連接對象cn
rs.OpenSQL,cn'執行strSQL所含的SQL命令,結果保存在rs記錄集對象中
cnn.Close
Setcnn=Nothing
endsub
請參考
連接資料庫後,通過寫SQL語句實現增刪改查
Ⅳ Excel VBA+SQL能處理EXCEL多少條數據
表格能容納的數據都可以處理,新版表格能容納104萬行左右,2003及以前的低版本只有6萬多行。
SQL本身沒有行數限制,只要表格能裝下都可以處理,只是數據多了、處理復雜的時候需要較多時間等待。
Ⅳ 在excel中如何使用vba實現將sql的數據快速寫入excel
DimconnAsNewADODB.Connection
connStr="Driver={SQLServer};DataBase=test;Server=(local);UID=sa;PWD=123"
conn.OpenconnStr'連接資料庫
DimrsAsNewRecordset
sql="select*froma"'查看錶a
rs.Opensql,conn,3,3
ifNotrs.EOFthen
ForiCols=0Tors.fields.Count-1
Sheets(1).Cells(1,iCols+1).Value=rs.fields(iCols).Name
NextiCols
Sheets(1).Cells(2,1).CopyFromRecordsetrs
endif
Ⅵ vba用sql在excel表中查數據時報"至少一個參數沒有被指定值"
1、你的數據表中必須有 NEName,Board_Name、Board_Type、Subrack_No、Inventory_Unit_ID、Serial_Number 這些欄位;
2、Sql = Sql & " FROM [" & CunLiangBook.Sheets(1).Name & "$] " 語句中 $ 號是不是應該去掉?
3、你查詢的是Excel中的數據,你看看你的這個 CunLiangBook.Sheets(1).Name 表格是否存在,一般我在做的時候,首先將表格名稱存儲在一個變數中,這樣的好處是出錯率極大降低。
4、Sql = Sql & " and (Subrack_No='" & 0 & "' or Subrack_No='" & 1 & "') " 語句中,對於具體的量不能使用變數的連接方式,應該是:
Sql = Sql & " and (Subrack_No='0' or Subrack_No='1') "
Ⅶ 用VBA語言調用sql資料庫數據到excel中
VBE 工具 引用,選中 Microsoft ActiveX Data Object 2.8 Library
我不清楚是不是UFDATA_013_2008表的VENDOR列的數據,如果不是,你自己改一下SQL語句吧,sql = "select VENDOR from UFDATA_013_2008"
Sub SQL數據導入()
Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim str As String
Dim sql As String
Dim i As Integer
str = "Provider=SQLOLEDB;Data Source=SQLSERVER伺服器名或IP;DATABASE=資料庫;UID=用戶名;PWD=密碼"
cn.Open str
Set rs = New ADODB.Recordset
sql = "select VENDOR from UFDATA_013_2008"
rs.Open sql, cn, adOpenStatic, adLockOptimistic
If Not rs.EOF Then
For i = 1 To rs.RecordCount
Sheet2.Cells(i, 1).Value = rs.Fields(0).Value
Next i
rs.MoveNext
End If
rs.Close
cn.Close
End Sub