zoukankan      html  css  js  c++  java
  • VBA:Excel 中利用 ODBC数据源,以及 Sheet.QueryTables对象 查询数据

    第一步:配置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 对象

    '--利用 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
    
  • 相关阅读:
    log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
    警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:fhcq-oa' did not find a matching property.
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    Maven 仓库之阿里云镜像配置
    HashMap 在 Java1.7 与 1.8 中的区别
    MySQL 相关知识细节及解析
    JS 如何准确获取当前页面URL网址信息
    i++ 和 ++i
    常见浏览器兼容性问题与解决方案(面试题目)
    面试题目简单整理-完善中
  • 原文地址:https://www.cnblogs.com/xbj-hyml/p/3302648.html
Copyright © 2011-2022 走看看