VBA:Excel 中利用 ODBC数据源,以及 Sheet.QueryTables对象 查询数据
2013-09-05 10:01
465 查看
第一步:配置ODBC数据源-"控制面板"-"管理工具"-"ODBC数据源"-"用户DSN"。如 "Reports.DSN" (可以查资料)
第二步:(1)在Excel(03)中-"数据"-"导入数据"-"新建数据库查询"-然后选择之前建立的ODBC源-..(这里几个对话框可以直接关闭)
-"Micorsoft Query"界面-"SQL"按钮(因为我是用sql语句查询)-输入sql语句-关闭(或者选择"将数据返回Excel"按钮)
(2)在Excel(07)中-"数据"-"自其它数据源"-"来自Microsoft Query"-...其他与03差不多
至此数据源,连接到excel中。其中一些步骤,写的有点模糊,大致OK
第三步:VBA代码--主要是利用 QueryTable 对象
第二步:(1)在Excel(03)中-"数据"-"导入数据"-"新建数据库查询"-然后选择之前建立的ODBC源-..(这里几个对话框可以直接关闭)
-"Micorsoft Query"界面-"SQL"按钮(因为我是用sql语句查询)-输入sql语句-关闭(或者选择"将数据返回Excel"按钮)
(2)在Excel(07)中-"数据"-"自其它数据源"-"来自Microsoft Query"-...其他与03差不多
至此数据源,连接到excel中。其中一些步骤,写的有点模糊,大致OK
第三步:VBA代码--主要是利用 QueryTable 对象
'--利用 QueryTable Sub QureyForMonth() Dim qTable As QueryTable, sql As String Dim curMonth As Date, firstDay As Date, lastDay As Date Dim i As Integer, num As Integer, j As Integer On Error GoTo hErr With ActiveSheet '--sheet1 表 If IsDate(.Range("B1").Value) Then curMonth = CDate(.Range("B1").Value) '--当前月份 firstDay = CDate(Year(curMonth) & "-" & Month(curMonth) & "-1") '--第一天 lastDay = DateAdd("m", 1, firstDay) '--下月第一天 lastDay = CDate(Year(curMonth) & "-" & Month(curMonth) & "-" & DateDiff("d", firstDay, lastDay)) '--最后一天 Set qTable = .QueryTables.Item("QUERY") qTable.sql = "SELECT A.InvoiceNo, A.InvDate, A.InvSeqNo, A.VNumber, A.PickDate, A.CustPO AS [Cust P.O.], A.ItemID, A.Enduser, A.EMS," & _ " A.OEM, A.CustItemID,A.Category, A.Qty AS [Inv.Qty], A.Currency, A.Price, B.Quantity, B.Warehouse,B.Location, " & _ " B.CustID, B.CustPO, B.PurchPO, B.InvoiceNO AS [B.Inv No.],B.VMINo " & _ " FROM VMISalesInvX A LEFT OUTER JOIN VMIStockIOX B ON A.VID = B.VID " & _ " WHERE (A.WareHouse IN ('H02', 'H03')) AND (A.InvDate BETWEEN '" & firstDay & "' AND '" & lastDay & "') AND (A.InvoiceNo <> '') " & _ " ORDER BY A.InvDate, A.InvoiceNo, A.InvSeqNo, B.ID" qTable.Refresh False '--设置格式 .Columns(2).NumberFormat = "yyyy-MM-dd" .Columns(5).NumberFormat = "yyyy-MM-dd" .Range("B1").NumberFormat = "YYYY-MM" .Cells.Select .Cells.EntireColumn.AutoFit .Range("B1").Select MsgBox "WMI Sales Stock IO Details Updated!", vbInformation, "UPDATE" Else .Range("B1").Select MsgBox "Input Date Error", vbCritical, "ERROR" End If End With Exit Sub '--查询结束 hErr: MsgBox "Error Number : " & Err.Number & vbCrLf & _ "Error Source : " & Err.Source & vbCrLf & _ "Error Description : " & Err.Description, vbCritical, "ERROR" End Sub
相关文章推荐
- VBA:Excel 中利用 ADO 查询数据
- EXCEL-VBA:通过SQL查询数据Sheet中的数据
- Excel VBA - Sheet对象
- laravel查询得到的数据(为对象object)无法进行数组循环遍历,而且不能用数组方式访问和查看的原因以及解决方法
- Excel VBA 数据视图和查询实例
- 【OC加强】枚举介绍、数组的排序、对象的排序、如何利用block排序以及一些数据类型知识
- Hibernate数据查询 利用关联关系操纵对象 Hibernate事务 Hibernate的Cache管理
- EXCEL VBA代码,实现点击Sheet1按钮控件保存不连续单元格的数据到Sheet2中,然后清空输入内容
- alv使用标准按钮调用excel查看数据时,需要开通对vba工程对象模型的访问
- iOS 演示 Modal Segue 的使用,包括参数如何从呈现者传递到 ModalView 以及数据如何从 ModalView 传回呈现者(利用委托对象)
- 利用ContentProvider和ContentResolver达到QQ换肤以及数据共享查询(暂无内容)
- Xml文件的读取以及通过GridView控件利用视图过滤器查询显示数据
- 利用VBA将excel数据表生成JSON文件(utf8)
- excel中 VBA实现 两sheet表间查询赋值应用示例
- Spring框架针对dao层的jdbcTemplate操作crud之query查询数据操作 —— 查询表,返回结果为对象的list集合
- Spring框架针对dao层的jdbcTemplate操作crud之query查询数据操作 —— 查询表,返回结果为某一个对象。
- 《JavaWeb---简单应用---练习JDBC,JSTL》---上传Excel文件,利用工具包解析,将数据储存到数据库中,可以查询删除
- Spring框架针对dao层的jdbcTemplate操作crud之query查询数据操作 —— 查询表,返回结果为对象的list集合
- 【利用Python进行数据分析——经验篇4】将多张DataFrame表写入到同一个Excel的不同sheet中
- 利用VBA遍历Excel所有sheet的例子