EXCEL 2013 VBA同时查询不同服务器上不同数据库上的两个文件

EXCEL 2013 VBA同时查询不同服务器上不同数据库上的两个文件,excel,vba,ado,Excel,Vba,Ado,当涉及EXCEL VBA和ADO时,我只有中等的经验。我有两个文件:任务文件和日历文件,每个文件位于不同的数据库和服务器上。我需要确定与任务相关的实际工作日数。所以我需要从任务文件中获取时间戳日期,对照日历文件检查它,以确定任务中有多少天是实际工作日。我知道如何在VBA脚本中打开两个单独的数据库连接,但我不知道如何组合这两个文件,以便获得工作日计数 像这样的 Select Taskid, count(*) From TaskFile, Calendar Where TaskDate >=

当涉及EXCEL VBA和ADO时,我只有中等的经验。我有两个文件:任务文件和日历文件,每个文件位于不同的数据库和服务器上。我需要确定与任务相关的实际工作日数。所以我需要从任务文件中获取时间戳日期,对照日历文件检查它,以确定任务中有多少天是实际工作日。我知道如何在VBA脚本中打开两个单独的数据库连接,但我不知道如何组合这两个文件,以便获得工作日计数

像这样的

Select Taskid, count(*) 
From TaskFile, Calendar
Where TaskDate >= CalendarDate
And   TaskDate <= CalendarDate
And   CalendarWorkDay = 1
Group by  Taskid
我考虑过用日历数据预加载工作表,但不知道查询将如何工作


如有任何建议或代码片段,将不胜感激

这是一个快速而肮脏的子程序,它将执行我在上面第二条评论中建议的操作。它可能不会完全按照你需要的那样开箱即用,但总体思路是合理的。只要意识到在第一个查询中返回的每个记录都会生成一个新的查询到第二个文件/数据库,因此如果有很多记录,它可能会变得非常复杂

Sub twoRecordsets()
    Dim objConn As ADODB.Connection, objConn2 As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim strSQL As String
    Dim strConn As String, strconn2 As String

    'open first connection
    Set objConn = New ADODB.Connection
    strConn = "<your 1st connection string>"
    objConn.Open strConn

    'open second connection
    Set objConn2 = New ADODB.Connection
    strconn2 = "<your 2nd connection string>"
    objConn2.Open strconn2

    'first query:
    strSQL = "Select Taskid, TaskDate From TaskFile GROUP BY TaskID"

    'open first recordset using first query
    Set rs = New ADODB.Recordset
    rs.Open strSQL, objConn

    'Die if there are no records returned
    If rs.EOF And rs.BOF Then
        Exit Sub
    End If

    'Loop through recordset
    rs.MoveFirst
    Do Until rs.EOF

        'build a sql statement to do the second bit. might have to monkey with quote marks and date formats depending on DB
        strSQL = "SELECT count(*) as recordcount FROM calendar where '" & rs.Fields("TaskDate").Value & "' >= CalendarDate And '" & rs.Fields("TaskDate").Value & "' <= CalendarDate And CalendarWorkDay = 1"

        'open recordset
        Set rs2 = New ADODB.Recordset
        rs2.Open strSQL, objConn2

        'Get your answer from the return
        heresYourAnswer = rs2.Fields("recordcount").Value

        'Iterate to next record in rs
        rs.MoveNext
    Loop


End Sub

您可能会考虑撤回两个记录集并将它们粘贴到自己的工作表上,然后使用ADODB来加入这两组数据并将它们粘贴到第三页中。我刚刚编写了一个快速VBA来查询excel工作簿,以了解另一个问题:它不需要太多修改。此外,如果在第一次查询中没有提取很多记录,那么可能只需循环查询结果,并在每个记录的第二个连接上触发SELECT。如果有很多唱片的话。。那么这可能不是一个很好的解决方案。谢谢你的回复。关于将两张图纸合并为第三张图纸的想法,我不确定我是否能够以这种方式计算范围内的数值。关于第二个循环数据的建议,这可能会奏效。你能告诉我在查找时应该关注什么吗?或者告诉我如何做,因为我必须承认我不知道如何做。再次感谢你的想法。花了一些时间认真研究你提供的东西,我明白了。我能够使代码适合我正在做的事情。最后一个问题与RS 2中的结果有关。日历的要点是确定实际工作时间,我想在RS 1中日历时间的旁边包括实际工作时间。我能把RS 2的结果写进RS 1吗?或者我能把RS 1和RS 2合并成RS 3吗?我正计划对EXCEL和记录集进行研究,看看我是否也能自己找出答案。您的时间、代码和支持都非常投入,再次感谢。