vbaexcelsql
Ⅰ 用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的运用了
Ⅱ 用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
Ⅲ VBA Excel sql Sheet1
sql查询excel,最常见的问题是数据类型不统一,ado打开excel表,默认扫描前八行数据,来猜测每列的数据类型,你看看你的close列数据类型是否统一.
子易空间站 - Excel 培训专家
Ⅳ 关于excel中利用vba将数据保存到SQL的问题
INSERT INTO TT(iYear,iMonth,Dept,Amount,Account,FA) SELECT iYear,iMonth,Dept,Amount,Account,FA" & _
" FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','DataSource=""" & strTempSourcePath & "\Source\"& strTempSourceName & _
""";User ID=ADMIN;Password=;Extended properties=Excel5.0')...[" & strSheetName(iMonth) & "$]
Ⅳ 用VBA将EXCEL内容一次性导入SQL
用VBA将EXCEL内容一次性导入SQL
'工具->引用->Microsoft ActiveX Date Object 2.0
Public Sub SaveData()
Dim Cnn As ADODB.Connection
Dim SQL As String
Set Cnn = New ADODB.Connection
'建立于数据库的链接
'这里根据你的实际值修改ConnectionString = "Driver=SQL Server;Server=<a href="https://www..com/s?wd=%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%90%8D%E7%A7%B0&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">服务器名称</a>;Database=数据库;Uid=账号;Pwd=密码;"
With Cnn
.Provider = "SQLOLEDB"
.ConnectionString = "Driver=SQL Server;Server=mxb\sqlexpress;Database=test;Uid=sa;Pwd=xiaoma;"
.Open
End With
'保存数据
r = Range("A65534").End(xlUp).Row
For i = 1 To r
'拼sql
SQL = "insert into T values('" & Cells(i, 1) & "','" & Cells(i, 2) & "'," & Cells(i, 3) & ")"
Cnn.Execute SQL
Next
Cnn.Close
Set Cnn = Nothing
MsgBox "保存成功"
End Sub
上面是通过VBA,插入数据到数据库,下面是从SQL查询Excel,然后直接insert into到数据库,也可以用数据库导入向导
--查询excel2007
select * from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Data Source=D:\2007.xlsx;Extended Properties="Excel 12.0;HDR=Yes;IMEX=1"')...[Sheet1$]
--查询excel2003
select * from OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\2003.xls";Extended properties=Excel 5.0')...[Sheet1$]
Ⅵ EXCEL VBA里怎么用SQL 的SELECT 语句
可以做到,但不是三言两语能说清楚的。至少VBA程序不会太短
如果用手工操作,不借助VBA,可以利用Excel的“数据-导入外部数据”菜单将SQL中的表先导入到Excel中,那么Excel数据与SQL数据的比较就变成了两个Excel表列的比较,很容易用数组公式或相关函数标识出重复的数据项的。
Ⅶ vba,sql与excel的关系
Excel可以通过VBA代码调用SQL数据库中的数据,这是通过运行VBA内置的方法,引用sql语言的文本作为参数来实现的
Ⅷ 在excel中用vba实现与sql数据库的数据比较
先建立一个sheet通过数据页签中自其它来源,将数据库中的资料导入。然后再建立一个sheet通过数据页签中的现有连接,然后通过sql语句就可以比较那两个sheet中的内容了。以后直接点击刷新数据就可以了
Ⅸ 在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
Ⅹ Excel 请问如何在VBA中执行SQL语句
sub test()
Dim Conn As New ADODB.Connection
Dim strConn As String
Dim strSQL As String
Dim rs As New ADODB.Recordset
strConn = "Provider=sqloledb;Server=192.168.1.111;Database=db2014;Uid=用户名;Pwd=密码;"
Conn.Open strConn
Max_row = Range("A1").CurrentRegion.Rows.Count
for i=1 to Max_row
strSQL = "select name from sales2014 where id='" & range("A" & i).value & "'"
Conn.Execute strSQL
rs.Open strSQL, Conn, 1, 1
range("B" & i).value= rs(0)
rs.Close
Set rs = Nothing
next i
'关闭数据库
Conn.Close
end sub