在Excel的VBA中使用SQL语句

要求一,将EXCEL 文件SG Master List SO Outanding 090520_ZY.xls中Master页内容中,ItemCode字段左边六位字符值,和U_Cat1字符值加上U_Cat2加上”-”号,再加上U_Cat3右边两位数相比较,将不相同所有行记录,复制到sheet2页中去.Sub 筛选 ()Dim cn As New ADODB.ConnectionDim sql As String'cn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullNamecn.Open "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.Path & "\SG Master List SO Outanding 090520_ZY.xls"sql = "select * from [Master$] where left(ItemCode,6) <> U_Cat1 & U_Cat2 & '-' & right(U_Cat3,2) Sheets("Sheet2").[A4].CopyFromRecordset cn.Execute(sql)cn.CloseSet cn = NothingEnd Sub一,在没有写代码这前要先通过菜单栏中”工具”,”引用”加载”ADO”类.'cn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullNamecn.Open "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.Path & "\SG Master List SO Outanding 090520_ZY.xls"这两句都能成功建立过程与文件的链接.二,在SQL语句中, FROM后面的格式一定要[Master$],中间Master是页名,SQL中用到的字段名是这个页中第一行数据值.三, Sheets("Sheet2").[A4].CopyFromRecordset cn.Execute(sql)语句中, Sheets("Sheet2")代表要复制的目标页(在写VBA,之前要先建立好.).[A4]是要粘贴的起启单元格.要求二,将EXCEL 文件SG Master List SO Outanding 090520_ZY.xls中Master页内容中,ItemCode字段左边六位字符值,和U_Cat1字符值加上U_Cat2加上”-”号,再加上U_Cat3右边两位数相比较,将不相同所有行记录,标上”黄颜色”.一,先选择ItemCode字段第一行单元格,按住”shift”+”cntre”+”向下箭头”这样,就能将本列单元格全部选定.(适合大量数据的表中).二,在”格式”,---“条件格式”,选择”公式”写入“=LEFT($B1,6)<>($N1&$O1&"-"&RIGHT($P1,2))”(这里的列是用$B1表示,因为选中所有列,所以EXCEL会将公式自动刷新所有列.)EXCEL(VBA)~SQL 经典写法范本汇集****************************************************************A、根据本工作簿的1个表查询求和写法范本Sub 查询方法一()Set CONN = CreateObject("ADODB.Connection")CONN.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullNamesql = "select 区域,存货类, sum(代销仓入库),sum(代销仓出库),sum(日报数量)from [sheet4$a:i] where 区域='" & [b3] & "' and month(日期)='" & Month(Range("F3")) & "' group by 区域,存货类"Sheets("sheet2").[A5].CopyFromRecordset CONN.Execute(sql)CONN.Close: Set CONN = NothingEnd Sub-----------------Sub 查询方法二()Set CONN = CreateObject("ADODB.Connection")CONN.Open "dsn=excel files;dbq=" & ThisWorkbook.FullNamesql = "select 区域,存货类, sum(代销仓入库数量),sum(代销仓出库数量),sum(日报数量)from [sheet4$a:i] where 区域='" & [b3] & "' and month(日期)='" & Month(Range("F3")) & "' group by 区域,存货类"Sheets("sheet2").[A5].CopyFromRecordset CONN.Execute(sql)CONN.Close: Set CONN = NothingEnd Sub********************************************************************* *****************************B、根据本工作簿2个表的不同类别查询求和写法范本Sub 根据入库表和回款表的区域名和月份分别求存货类发货数量和本月回款数量查询()Set conn = CreateObject("adodb.connection")conn.Open "provider=microsoft.jet.oledb.4.0;" & _"extended properties=excel 8.0;data source=" & ThisWorkbook.FullNameSheet3.ActivateSql = " select a.存货类,a.fh ,b.hk from (select 存货类,sum(本月发货数量) " _& " as fh from [入库$] where 存货类 is not null and 区域='" & [b2] _& "' and month(日期)=" & [d2] & " group by 存货类) as a" _& " left join (select 存货类,sum(数量) as hk from [回款$] where 存货类" _& " is not null and 区域='" & [b2] & "' and month(开票日期)=" & [d2] & "" _& " group by 存货类) as b on a.存货类=b.存货类"Range("a5").CopyFromRecordset conn.Execute(Sql)End Sub*******************************************************************C、根据本文件夹下其他工作簿1个表区域的区域求和Sub 在工作表1汇总本文件夹下001工作薄的表1分数列查询汇总()Set conn = CreateObject("ADODB.Connection")conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "\001.xls"sql = "select sum(分数) from [sheet1$]"Sheets(1).[a2].CopyFromRecordset conn.Execute(sql)conn.Close: Set conn = NothingEnd Sub---------------------Sub 在工作表1汇总本文件夹下001工作薄的表1A1:A10查询汇总()Set conn = CreateObject("ADODB.Connection")conn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no;';data source=" & ThisWorkbook.Path & "\001.xls"sql = "select sum(f1) from [sheet1$a1:a10]"Sheets(1).[A5].CopyFromRecordset conn.Execute(sql)conn.Close: Set conn = NothingEnd Sub-----------------------Sub 在工作表1汇总本文件夹下001工作薄的表1分数列A1:A7查询并msgbox 表达汇总()Set conn = CreateObject("ADODB.Connection")Set rr = CreateObject("ADODB.recordset")conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "\001.xls"sql = "select sum(分数) from [sheet1$a1:a7]"Sheets(1).[A8].CopyFromRecordset conn.Execute(sql)rr.Open sql, conn, 3, 1, 1MsgBox rr.fields(0)conn.Close: Set conn = NothingEnd Sub********************************************************************* *********************D、根据本文件夹下其他工作簿多个表区域的单列区域查询求和sub 本文件夹下其他工作簿的每个工作簿的第4列 30行查询求和Dim cn As Object, f$, arr&(1 To 30), i%Application.ScreenUpdating = FalseSet cn = CreateObject("adodb.connection")f = Dir(ThisWorkbook.Path & "\*.xls")Do While f <> ""If f <> Thencn.Open "provider=microsoft.jet.oledb.4.0;extendedproperties='excel 8.0;hdr=no;';data source=" & ThisWorkbook.Path & "\" & fRange("d5").CopyFromRecordset cn.Execute("select f4 from [基表1$a5:d65536]")cn.CloseFor i = 1 To 30arr(i) = arr(i) + Range("d" & i + 4)Next iEnd Iff = DirLoopRange("d5").Resize(UBound(arr), 1) = WorksheetFunction.Transpose(arr) Application.ScreenUpdating = TrueEnd Sub********************************************************************* *****************************E、根据本文件夹下其他工作簿多个表区域的多列区域查询求和sub 本文件夹下其他工作簿的每个工作簿的第B\C\D列 25行查询求和Dim cn As Object, f$, arr&(1 To 25, 1 To 3), i%Application.ScreenUpdating = FalseSet cn = CreateObject("adodb.connection")f = Dir(ThisWorkbook.Path & "\*.xls")Do While f <> ""If f <> Thencn.Open "provider=microsoft.jet.oledb.4.0;extendedproperties='excel 8.0;hdr=no;';data source=" & ThisWorkbook.Path & "\" & fRange("b6").CopyFromRecordset cn.Execute("select f2,f3,f4 from [基表3$a6:e65536]")cn.CloseFor i = 1 To 25For j = 1 To 3arr(i, j) = arr(i, j) + Cells(i + 5, j + 1)Next jNext iEnd Iff = DirLoopRange("b6").Resize(UBound(arr), 3) = arrApplication.ScreenUpdating = TrueEnd Sub********************************************************************* **************F、其他相关知识整理' 用excel SQL方法'conn是建立的连接对象,用open打开' 通过 CreateObject("ADODB.Connection") 这一句建立了一个数据库连接对象conn' 在工程中就不再需要引用“Microsot ActiveX Data Objects 2.0Library“ 对象'设置对象 conn 为一个新的 ADO 链接实例,也可以用 set conn = New ADODB.Connection。

合集下载

ExcelVBAADOSQL入门教程022:EXECUTE

ExcelVBAADOSQL入门教程022:EXECUTE

ExcelVBAADOSQL入门教程022:EXECUTE1.诸君好,我们今天聊Connection对象的Execute方法;该方法可以向数据库提交查询,比如SQL语言,是我们系列教程中经常使用到的——其语法如下:Connection.Execute CommandText,RecordsAffected, Options第1个参数CommandText为字符串类型,是必须的,用来指定提交的查询,比如SQL语句。

第2个参数RecordsAffected是可选的输出参数,用来指定查询影响的行数。

第3个参数Options也是可选参数,用于指定命令类型和可能的CommandTypeEnum值的详细信息。

第2~3参数,作为新手我们基本用不到,所以就当没看到。

2.Execute方法有两种使用形式。

一种是Cnn.Execute SQL;另一种是Cnn.Execute(SQL)。

没错。

两者看似一样,但以鲁迅他老人家两棵枣树般寂寞的情怀发誓,其实并不一样后者比前者多了一对括号……当Execute执行的SQL语句是不需要返回记录集时,例如对数据库数据的删除、新增、更新等,Execute方法的参数,既可以加括号,也可以不加括号,比如:Cnn.Execute 'delete from 成绩表 where 姓名='马可波罗''也可以写成:Cnn.Execute ('delete from 成绩表 where 姓名='马可波罗'')而当Execute指定的SQL语句是需要返回记录集,也就是SELECT 查询语句时,由于VB语法规定带返回值的调用其参数必须加括号,因此就需要对SQL语句加上一对括号了。

……举个例子:Sub DoExecute2()Dim cnn As Object, rst As ObjectDim i As Long, Sql As StringSet cnn = CreateObject('adodb.connection')cnn.Open 'Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=' & ThisWorkbook.FullName '创建到代码所在工作簿的连接,Excel版本非03版Sql = 'select * from [成绩表$]' 'Sql语句Set rst = cnn.Execute(Sql) 'Execute执行Sql语句Cells.ClearContentsFor i = 0 To rst.Fields.Count - 1'遍历获取记录集中的标题Cells(1, i 1) = rst.Fields(i).NameNextRange('a2').CopyFromRecordset rst'获取记录集中的记录cnn.Close '关闭连接Set cnn = Nothing '释放内存End Sub上面的代码Set rst = cnn.Execute(Sql),得到一个新的、只读属性的Recordset记录集,该记录集由标题和记录行两部分构成;我们通过遍历循环的方式,将该记录集的标题名()依次放置到表格的第1行;并使用单元格的CopyFromRecordset方法,将查询记录放置到右上角为A2单元格的区域内。

EXCEL(VBA)连接MSSQL查询数据

EXCEL(VBA)连接MSSQL查询数据

EXCEL(VBA)连接MSSQL查询数据两种方法:1、通过建立ODBC,例如下面的名为“SQL_SERVER”,再调用该ODBC进行连接Dim qt As QueryTable' 定义一个查询表sqlstring = "select * from aad"'定义一句SQL的查询语言内容到sqlstring里去, 以备调用.connstring = "ODBC;DSN=SQL_Server;UID=sa;PWD=;Database=db_demo"'定义连接的方式到connstring里去, 以备调用. 说的是, 采用ODBC方式连接, ODBC的名字是SQL_Server, 用户名是sa, 密码是空, 连接AIS20060414142400库.With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("A1"),sql:=sqlstring)'选择当前工作表中的B1单元格做为起始的地方, 开始连接数据库, 按条件查询, 并返回数据..Refresh'刷新End With'数据查询结束, 则循环结束2、直接与SQL服务器建立连接(有三种表示方式)'不用DIM定义Set Conn = CreateObject("adodb.connection")Conn.Open "Driver=SQL Server;SERVER=erptest;Database=db_demo;uid=sa;pwd="If Conn.State = 1 ThenMsgBox "打开成功"sqll = "SELECT * FROM aad"[a2].CopyFromRecordset Conn.Execute(sqll)'下面语句是添入标题,视需要而添加[a1] = "序号": [b1] = "标题": [c1] = "..."newnumber = edRange.Rows.Count '有数据行的统计If newnumber > 1 ThenMsgBox "有数据返回"End IfEnd IfConn.Close '关闭连接Set Conn = Nothing '释放连接'三种SQL直接连接方式Conn.Open "Driver=SQL Server;SERVER=erptest;Database=db_demo;uid=sa;pwd="Conn.Open "Provider=sqloledb;SERVER=erptest;Database=db_demo;uid=sa;pwd="Conn.Open "driver={SQL Server};SERVER=erptest;Database=db_demo;uid=sa;pwd="。

excel连数sql语句

excel连数sql语句

excel连数sql语句
在Excel中使用SQL语句可以帮助你对数据进行更复杂的分析和处理。

要在Excel中使用SQL语句,你需要使用Excel的数据功能和Microsoft Query来实现。

以下是一个简单的示例来说明如何在Excel中使用SQL语句:
首先,确保你的数据已经准备好,然后按照以下步骤操作:
1. 打开Excel并导入你的数据表格。

2. 在Excel菜单中选择“数据”选项卡,然后点击“来自其他来源”>“从SQL Server”(或者选择适合你的数据库类型)。

3. 输入数据库服务器的名称和登录信息,然后选择你要查询的数据库。

4. 在“查询向导”中,选择“使用 SQL 向导”。

5. 在“SQL 向导”中,输入你的 SQL 查询语句。

例如,如果你想要从表格中选择所有的数据,你可以输入,SELECT FROM [表
格名]。

6. 点击“完成”并选择将数据放在新的工作表中或者现有的位置。

通过以上步骤,你就可以在Excel中使用SQL语句来查询和分
析数据了。

需要注意的是,SQL语句在Excel中的使用有一些限制,不支持所有的SQL功能,但是可以满足大部分基本的查询需求。

另外,你也可以在Excel中使用宏来执行SQL查询,这样可以
更灵活地控制数据的处理和分析过程。

通过编写VBA宏代码,你可
以实现更复杂的数据处理和分析功能。

总之,通过在Excel中使用SQL语句,你可以更灵活地处理和
分析数据,实现更复杂的查询和计算功能。

希望这些信息能够帮助
你更好地使用Excel进行数据处理和分析。

分享ExcelVBA中SQL查询模块代码

分享ExcelVBA中SQL查询模块代码

分享ExcelVBA中SQL查询模块代码分享Excel VBA中SQL查询模块代码更多最近一直在写VBA,因为涉及到的统计比较多,且资料量也比较大,所以比较喜欢用ADO+SQL的方法,但这样就在程序中多次出现定义对象--连接数据库--执行查询--输出结果这个过程,所以干脆整理出来,做一个模块,这样以后随时可以调用,且应用起来比较方便,不会被一大堆的代码搞晕。

模块名称为queryinfo,参数ssql为SQL语句,biaoming为结果输出的表名称,weizhi为输出表位置的左上角单元格。

引用示例:Call queryinfo("SELECT field1,field2 FROM [sheet1$]","sheet2","A2")表示查询表1中的第一、第二字段的数据输出到表2,在表2中从A2单元格开始写入数据。

模块代码:Sub queryinfo(ssql As String, biaoming As String, weizhi As String)Dim conn As ADODB.ConnectionSet conn = New ADODB.Connectionconn.Open "Provider=Microsoft.Jet.Oledb.4.0;" & _"Extended Properties=Excel 8.0;" & _"Data Source=" & ThisWorkbook.Path & "\" & If conn.State = adStateOpen ThenSheets(biaoming).Range(weizhi).CopyFromRecordset conn.Execute(ssql)conn.CloseEnd IfSet conn = NothingEnd Sub。

excel vba sql语句示例

excel vba sql语句示例

excel vba sql语句示例Excel VBA中SQL语句示例-以中括号为主题在Excel VBA中,SQL(Structured Query Language)是一种用于管理关系数据库的语言。

它允许用户从数据库中检索数据,更新和删除数据,并与数据库进行交互。

中括号[]在SQL语句中用于标识数据表或字段名称。

本文将介绍几个常用的Excel VBA中使用SQL语句并涉及中括号的示例。

1.查询数据表中所有字段使用SELECT语句可以从数据表中选择一条或多条记录。

要选择所有字段,可以使用“*”或字段列表。

使用“*”选取所有字段非常方便,但不建议在大型数据表中使用。

以下是一个示例,它使用“*”选取数据表中的所有字段。

Sub SelectAllFields()'Define variablesDim cn As ADODB.ConnectionDim rs As ADODB.RecordsetDim strQuery As String'Open connection to the databaseSet cn = New ADODB.Connectioncn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\User\Documents\Database.accdb;Persist Security Info=False;"cn.Open'Create SQL query to select all fields from the data tablestrQuery = "SELECT * FROM [Data Table]"'Execute the query and store the result in a recordsetSet rs = cn.Execute(strQuery)'Close the database connectioncn.CloseSet cn = NothingEnd Sub2.根据条件查询数据表中的记录使用WHERE子句可以根据指定的条件从数据表中检索一条或多条记录。

VBA调用SQL查询的方法与示例

VBA调用SQL查询的方法与示例

VBA调用SQL查询的方法与示例VBA(Visual Basic for Applications)是一种广泛应用于Microsoft Office软件中的宏语言,它可以使用户通过编写代码来自动化执行各种任务。

在Excel、Access等应用程序中,VBA可以与SQL(Structured Query Language)数据库查询语言相结合,实现对数据库的操作和管理。

本文将介绍VBA调用SQL查询的方法与示例,并提供相关代码供读者参考。

1. 连接到数据库在VBA中调用SQL查询之前,我们需要先连接到数据库。

VBA中连接数据库的方法有许多种,这里我们以连接到Microsoft Access数据库为例进行说明。

首先,我们需要在VBA代码中添加对Microsoft ActiveX Data Objects(ADO)库的引用。

在VBA编辑器中,选择“工具”>“引用”,然后选中“Microsoft ActiveX Data Objects x.x Library”。

接下来,我们可以使用ADO连接字符串来连接到数据库。

例如,对于Microsoft Access数据库,连接字符串的格式为:```Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\path\to\database.accdb;```我们可以将连接字符串保存在一个变量中,并使用`ADODB.Connection`对象来进行连接。

示例代码:```VBADim conn As ObjectSet conn = CreateObject("ADODB.Connection")Dim connectionString As StringconnectionString ="Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\path\to\database.accdb;"conn.Open connectionString```2. 执行SQL查询连接成功后,我们可以通过执行SQL查询语句来检索数据库中的数据。

VBA与SQL语句的结合与应用实例

VBA与SQL语句的结合与应用实例在现代信息化时代,数据处理已经成为各个行业中不可或缺的一环。

在处理大量数据时,使用Excel和SQL数据库是非常常见的选择。

而结合VBA(Visual Basic for Applications)和SQL语句,可以将两者的优势发挥到极致,提高数据处理的效率和准确性。

本文将通过一些实例来展示VBA与SQL语句的结合与应用。

案例一:数据导入与清洗假设我们有一个存储了客户订单的Excel表格,我们需要将其中的数据导入到SQL数据库中进行进一步处理。

这时,我们可以使用VBA编写一个宏来实现自动将Excel中的数据导入到数据库表中。

首先,我们需要在Excel中添加一个按钮,通过宏来触发数据导入的操作。

然后,我们可以使用VBA代码来连接到数据库,并执行相应的SQL语句将数据导入。

示例代码如下:```vbaSub ImportDataToSQL()Dim conn As ObjectDim rs As ObjectDim strSQL As StringDim rng As RangeDim cell As RangeSet conn = CreateObject("ADODB.Connection")conn.ConnectionString = "Provider=<provider>; Data Source=<data_source>; Initial Catalog=<catalog>; User ID=<user_id>; Password=<password>"conn.OpenSet rng = ThisWorkbook.Sheets("Sheet1").Range("A2:D10") ' 假设数据范围为A2:D10strSQL = "INSERT INTO TableName (Column1, Column2, Column3, Column4) VALUES (?,?,?,?)"For Each cell In rngSet rs = CreateObject("ADODB.Recordset")rs.Open strSQL, connrs.AddNewrs.Fields("Column1").Value = cell.Offset(0, 0).Valuers.Fields("Column2").Value = cell.Offset(0, 1).Valuers.Fields("Column3").Value = cell.Offset(0, 2).Valuers.Fields("Column4").Value = cell.Offset(0, 3).Valuers.Updaters.CloseSet rs = NothingNext cellconn.CloseSet conn = NothingEnd Sub```在上述示例代码中,我们需要替换掉连接字符串中的`<provider>`、`<data_source>`、`<catalog>`、`<user_id>`和`<password>`,以便正确连接到目标数据库。

vba sql 查询语句

vba sql 查询语句如何使用VBA编写SQL查询语句VBA(Visual Basic for Applications)是一种用于自定义Microsoft Office应用程序的编程语言。

当涉及到对数据进行操作时,VBA可以与SQL(Structured Query Language)一起使用,SQL 是一种用于管理关系数据库和执行查询的编程语言。

本文将为您介绍如何使用VBA编写SQL查询语句。

第一步:引用ADO库在使用VBA编写SQL查询语句之前,我们需要引用并使用ADO (ActiveX Data Objects)库。

ADO库使我们能够在VBA中连接到数据库,并执行SQL查询。

您可以通过按下"Alt + F11"键来打开VBA 编辑器,在菜单栏中选择"工具" -> "引用",然后在弹出的对话框中勾选"Microsoft ActiveX Data Objects x.x库"(其中x.x为版本号)并点击"确定"按钮。

第二步:连接数据库在VBA中连接到数据库是使用ADO库的第一步。

您可以使用以下代码片段连接到数据库:Dim conn As ADODB.ConnectionSet conn = New ADODB.Connectionconn.ConnectionString = "Provider=SQLOLEDB;Data Source=数据库服务器;Initial Catalog=数据库名称;User ID=用户名;Password=密码;"conn.Open在上述代码中,您需要将"数据库服务器"替换为实际的数据库服务器名称,将"数据库名称"替换为实际的数据库名称,将"用户名"替换为实际的数据库用户名,将"密码"替换为实际的数据库密码。

excel中使用sql语句 -回复

excel中使用sql语句-回复如何在Excel中使用SQL语句在Excel中使用SQL(Structured Query Language)语句可以帮助我们更高效地处理和分析数据。

SQL是一种用于管理和操作关系数据库的语言,通过使用SQL,我们可以查询、插入、更新和删除数据,以及进行数据分析和报表生成。

下面是一步一步的指南,介绍如何在Excel中使用SQL语句来处理数据。

第一步:启用“开发者”选项卡默认情况下,“开发者”选项卡在Excel中是被禁用的,我们需要先启用它。

点击Excel菜单栏上的“文件”,然后选择“选项”。

在“Excel选项”对话框中,选择“自定义功能区”选项卡,然后在右侧的“主要选项卡”列表中勾选“开发者”选项卡,并点击“确定”按钮。

现在,“开发者”选项卡就会显示在Excel的顶部菜单栏上。

第二步:导入数据源在Excel的工作簿中,点击“开发者”选项卡上的“Visual Basic”按钮。

这会打开Visual Basic for Applications(VBA)编辑器。

在VBA编辑器中,点击“插入”菜单并选择“模块”,这样就会创建一个新的模块,我们可以在其中编写SQL代码。

首先,我们需要导入我们要查询的数据源。

点击VBA编辑器的“工具”菜单,选择“引用”,在弹出的“引用”对话框中勾选“Microsoft ActiveX Data Objects x.x Library”(x.x表示版本号)并点击“确定”按钮。

这样就可以使用ADODB对象库来连接和查询数据库。

为了连接我们的数据源,我们需要在VBA模块中编写一些代码。

以下是一个示例:VBASub ConnectToDatabase()'声明变量Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim connStr As StringDim sql As String'设置连接字符串connStr = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\path\to\database.accdb"'打开数据库连接conn.Open connStr'设置SQL语句sql = "SELECT * FROM Customers"'执行SQL查询rs.Open sql, conn'将查询结果输出到工作表Sheet1.Cells(1, 1).CopyFromRecordset rs'关闭数据库连接rs.Closeconn.CloseEnd Sub以上代码通过创建一个ADODB.Connection对象来建立与数据库的连接,指定数据源的路径和提供程序。

EXCELVBA的SQL查询

EXCELVBA的SQL查询EXCEL VBA 的SQL查询知识就是这样,几天不学,很快会忘记。

3年没有玩这个了。

不得不重学。

' 用excel SQL方法'conn是建立的连接对象,用open打开' 通过CreateObject("ADODB.Connection") 这一句建立了一个数据库连接对象conn' 在工程中就不再需要引用“Microsot ActiveX Data Objects 2.0 Library“ 对象'设置对象 conn 为一个新的 ADO 链接实例,也可以用 set conn = New ADODB.Connection。

--------------' conn.Close表示关闭conn连接' Set conn = Nothing 是把连接对象conn置空,不然你退出了文件,但数据库还没有关闭conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "\001.xls"能把这段含义具体解释一下吗?'这里的dbq的作用?'------------------'dsn是缩写,data source name数据库名是 excel file'dbq 也是缩写,data base query 意思是数据库查询,后接源库文件名 001.xls'---------------------'代码中长单词怎么记住的?'比如copyfromrecordset可以拆开记忆,copy、from、recordset 这三个单词意思知道吧,就是“复制、从、记录集”'-----------------'Sql = "select sum(分数) from [sheet1$]"这里加"分数"两字什么作用?'SQL一般结构是select 字段 from 表,意思是从指定的表中查询字段,字段的理解可以是:表中的列名''分数是001.xls文件的sheet1第一行A列的字段名,SQL一般以字段来识别每列数据'-------------------'为什么要用复制的对象引用过来计算呢?'因为Sql语句只是对源数据库的字段找到了符合条件的的数据,但不会自动复制到汇总表来,所以需要复制copy'注意这里的 [sheet1$]" ,001文件的数据存放地上sheet1表,应当用方括号并加上$''如果源数据文件001不是excel,而是Access,则引用表时,不需要加方括号,也不要$'-------------------------------还有,这里Execute表示什么作用?'' Execute是执行SQL查询语句的意思-----------------------------如果不要字段也可以,那么在打开语句中加上:hdr=no'这样没有分数字段也可实现'SQL语句我换了形式,而且加上了hdr=no,即无需字段,而且我在SQL中用了sum(f1),f1表示第一列数据'[sheet1$a1:a10] "是只求a1:a10区域的和"选择供应商和选择月份记录的查询Private Sub CommandButton1_Click()Range("a5:k1000").ClearContentsSet conn = CreateObject("ADODB.Connection")conn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;imex=1';data source=" &ThisWorkbook.FullNameIf Range("b3") = "全部" And Range("d3") = "全部" ThenSql = "select * from [数据源$a3:i1000] "GoTo 100End IfIf Range("b3") = "全部" ThenSql = "select * from [数据源$a3:i1000] where month(日期) = '" & [d3] & "'"GoTo 100End IfIf Range("d3") = "全部" ThenSql = "select * from [数据源$a3:i1000] where 供应商= '" & [b3] & "'"GoTo 100End IfIf Range("d3") <> "全部" And Range("d3") <> "全部" Theni = Range("d3")Sql = "select * from [数据源$a3:i1000] where (供应商= '" & [b3] & "') and (month(日期) = '" & i & "')"GoTo 100End If100:Sheets("统计").Range("a5").CopyFromRecordset conn.Execute(Sql)conn.Close: Set conn = NothingEnd Sub-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-二)查询某地的收款记录工作表的收款日期,凭证号,金额,摘要和送货记录工作表的发货日期,单号,金额,折扣,赠送,退货,备注Private Sub CommandButton1_Click()Range("a6:k16").ClearContentsSet conn = CreateObject("ADODB.Connection")conn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;imex=1';data source=" & ThisWorkbook.FullNameSql1 = "select 收款日期,凭证号,金额,摘要from [收款记录$B2:F20] where 客户名称 = '" & [b2] & "'"Sql2 = "select 发货日期,单号,金额,折扣,赠送,退货,备注 from [送货记录$B2:i20] where 客户名称 = '" & [b2] & "'"Sheets("套打").Range("a6").CopyFromRecordset conn.Execute(Sql1)Sheets("套打").Range("e6").CopyFromRecordset conn.Execute(Sql2)conn.Close: Set conn = NothingEnd Sub用VBA将SQL查询结果送到EXCEL指定单元格Dim i As Integer, j As Integer, sht As Worksheet 'i,j为整数变量;sht 为excel工作表对象变量,指向某一工作表Dim cn As New ADODB.Connection '定义数据链接对象,保存连接数据库信息;请先添加ADO引用Dim rs As New ADODB.Recordset '定义记录集对象,保存数据表Dim strCn As String, strSQL As String '字符串变量strCn = "Provider=sqloledb;Server=(local);Database=tywk;Uid=sa;Pwd=wkserver9;" '定义数据库链接字符串cn.Open strCnFINALROW = Cells(65535, 1).End(xlUp).RowSet sht = ThisWorkbook.Worksheets("更新数据库")For i = 2 To FINALROW '循环开始strSQL = "insert into tywk.dbo.表名 values('" & sht.Cells(i, 1) _& "' ,'" & sht.Cells(i, 2) & "' ,'" & sht.Cells(i, 3) & "' ,'" & sht.Cells(i, 4) _& "' ,'" & sht.Cells(i, 5) & "' ,'" & sht.Cells(i, 6) & "' ,'" & sht.Cells(i, 7) _& "' ,'" & sht.Cells(i, 8) & "' ,'" & sht.Cells(i, 9) & "' ,'" & sht.Cells(i, 10) _& "' ,'" & sht.Cells(i, 11) & "' ,'" & sht.Cells(i, 12) & "' ,'" & sht.Cells(i, 13) _& "' ,'" & sht.Cells(i, 14) & "' ,'" & sht.Cells(i, 15) & "' ,'" & sht.Cells(i, 16) _& "' ,'" & sht.Cells(i, 17) & "' ,'" & sht.Cells(i, 18) & "');"cn.Execute strSQLNextMsgBox "保存成功"cn.Close。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档