在Excel SQL查询中使用Offset

时间:2017-05-04 08:20:07

标签: sql excel excel-vba header vba

我正在处理Excel文件以从其他已关闭的Excel文件中收集信息 提供程序是 Microsoft.ACE.OLEDB.12.0 ,一切正常(几乎)。

为了拥有可更新的查询,我使用命令HDR = no以获得列名称,如F1,F2,F3 ......然后我检索名称(请参阅下面的代码,来自Stack Overflow的代码)。

但是,使用命令Union All,我还将标题检索为数据,如果我从5个文件中收集数据,我将获得5个标题。 因此,我正在寻找一种解决方案,在Excel SQL查询中使用命令HDR = NO检索标头(从每个文件的第2行开始)。

我在SQL查询中尝试了OFFSET命令,但是收到错误消息。 我也尝试在原始文件中获取行号,但我没有找到命令。

你有任何想法可以帮我解决这个问题吗?

非常感谢, BR

信息代码:

Option Explicit

Sub SqlUnionTest()    
    Dim strConnection As String
    Dim strQuery As String
    Dim objConnection As Object
    Dim objRecordSet As Object

    strConnection = _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "User ID=Admin;" & _
        "Data Source='" & ThisWorkbook.FullName & "';" & _
        "Mode=Read;" & _
        "Extended Properties=""Excel 12.0 Macro;"";"

    strQuery = _
        "SELECT * FROM [Sheet1$] " & _
        "IN '" & ThisWorkbook.Path & "\Source1.xlsx' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=NO;'] " & _
        "UNION " & _
        "SELECT * FROM [Sheet1$] " & _
        "IN '" & ThisWorkbook.Path & "\Source2.xlsx' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=NO;'] " & _
        "UNION " & _
        "SELECT * FROM [Sheet1$] " & _
        "IN '" & ThisWorkbook.Path & "\Source3.xlsx' " & _
        "[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=NO;'] " & _
        "ORDER BY ContactName;"

    Set objConnection = CreateObject("ADODB.Connection")
    objConnection.Open strConnection
    Set objRecordSet = objConnection.Execute(strQuery)
    RecordSetToWorksheet Sheets(1), objRecordSet
    objConnection.Close   
End Sub


Sub RecordSetToWorksheet(objSheet As Worksheet, objRecordSet As Object)
    Dim i As Long

    With objSheet
        .Cells.Delete
        For i = 1 To objRecordSet.Fields.Count
            .Cells(1, i).Value = objRecordSet.Fields(i - 1).Name
        Next
        .Cells(2, 1).CopyFromRecordset objRecordSet
        .Cells.Columns.AutoFit
    End With
End Sub

0 个答案:

没有答案