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