Excel DAO未正确读取所有记录集

Excel DAO未正确读取所有记录集,excel,vba,ms-access,report,Excel,Vba,Ms Access,Report,我有两个函数,可以为我创建记录集,然后将其读入电子表格 然而,这个excel报告中有一些列的开头没有数据,出于某种奇怪的原因,它第一次没有从文件中读取整个列的数据 例如,某些类型的线有a、b、c列和值,有些在d、e、f列中,有些在g、h、i列中。例如,a,b,c是第一个有值的,但d到i是多个记录行的空白。这似乎是因为在将记录集放入工作表后,d到i的整个列范围都是空白的 为什么? 这是将数据放入电子表格的代码: Public Sub PutRecordsetInSheet(ByVal RS As

我有两个函数,可以为我创建记录集,然后将其读入电子表格

然而,这个excel报告中有一些列的开头没有数据,出于某种奇怪的原因,它第一次没有从文件中读取整个列的数据

例如,某些类型的线有a、b、c列和值,有些在d、e、f列中,有些在g、h、i列中。例如,a,b,c是第一个有值的,但d到i是多个记录行的空白。这似乎是因为在将记录集放入工作表后,d到i的整个列范围都是空白的

为什么?

这是将数据放入电子表格的代码:

Public Sub PutRecordsetInSheet(ByVal RS As Object, ByVal TopLeft As Range, _
Optional ByVal Headers As Boolean = True)
'Lists field names in the top row if Headers=True
'Pastes the records below them.

    Dim i As Integer
    If Headers Then
        For Each objField In RS.Fields
            i = i + 1
            TopLeft.Cells(1, i).Value = objField.Name
        Next objField
        TopLeft.Cells(2, 1).CopyFromRecordset RS
    Else
        TopLeft.Cells(1, 1).CopyFromRecordset RS
    End If
End Sub
这是我用来加载文件的代码,我在电子表格中有基于excel文件格式的参数:

Public Sub OpenFiles(SettingsSheet As Worksheet, FileCnt As Integer, _
    ByRef FileToOpen() As String, ByRef FileSettings() As String, _
    ByRef Connection() As Object, RecordSets() As Object, ByRef SheetsArr() As Variant)

    'Set File Count
    ReDim FileToOpen(1 To 3, 1 To FileCnt) As String
    Dim SFile As Integer

    'Prepare Dialogs
    For cnt = 1 To FileCnt
        FileToOpen(1, cnt) = SettingsSheet.Cells(cnt + 1, "B") 'Dialog Report File Description
        FileToOpen(2, cnt) = SettingsSheet.Cells(cnt + 1, "C") 'Dialog File Extension Choices"
    Next cnt

    'Prompt File Dialogs
    For cnt = 1 To FileCnt
        Dim fDialog As FileDialog, result As Integer
        Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
        'File Dialog Properties
        With fDialog
            .AllowMultiSelect = False
            .Title = FileToOpen(1, cnt)
            .InitialFileName = WorkingPath
            'File filters
            .Filters.Clear
            .Filters.Add "Report Files", FileToOpen(2, cnt)
            'Show the dialog. -1 means success!
            .Show
            If .SelectedItems.Count > 0 Then
                FileToOpen(3, cnt) = .SelectedItems(1)
            ElseIf .SelectedItems.Count = 0 Or .SelectedItems.Count = Empty Then
                SFile = cnt
                GoTo Cancelled:
            End If
        End With
    Next

    'Prepare Connection Settings
    Dim CSet As String
    ReDim FileSettings(1 To 3, 1 To FileCnt)

    For cnt = 1 To FileCnt
        CSet = LCase(Right(FileToOpen(3, cnt), Len(FileToOpen(3, cnt)) - InStrRev(FileToOpen(3, cnt), ".")))

        x = Application.Match(CSet, SettingsSheet.Range("E1:E" & SettingsSheet.Cells(Rows.Count, "E").End(xlUp).Row), 0)
        If Not (IsError(x)) Then
                FileSettings(1, cnt) = SettingsSheet.Cells(x, "F") 'Provider
                FileSettings(2, cnt) = SettingsSheet.Cells(x, "G") 'Extended Properties 1
                FileSettings(3, cnt) = SettingsSheet.Cells(x, "H") 'Extended Properties 2
        End If
        Set x = Nothing
    Next cnt

    'Establish Connections and prepare Record Sets
    ReDim Connection(1 To FileCnt)
    ReDim RecordSets(1 To FileCnt)

    For cnt = 1 To FileCnt
        Set Connection(cnt) = CreateObject("ADODB.Connection")
        Set RecordSets(cnt) = CreateObject("ADODB.Recordset")

        With Connection(cnt)
        .Provider = FileSettings(1, cnt)
        .ConnectionString = "Data Source=" & FileToOpen(3, cnt) & ";" & _
        "Extended Properties=" & Chr(34) & FileSettings(2, cnt) & ";" & _
        FileSettings(3, cnt) & Chr(34) & ";"
        .Open
        End With
    Next cnt

    Exit Sub
Cancelled:
        MsgBox "No " & FileToOpen(1, SFile) & " File Specified.", vbExclamation, "User Cancelled"

        On Error Resume Next
        Call DelTmpSheets(SheetsArr())
        FinalReport.Delete
        Err.Clear
        AppDefaults
        End
End Sub

无法用您提供的信息复制您的结果。您确定不是这样的数据吗?请向我们显示Access查询,因为某些计算表达式可能会产生干扰。它在Excel中,我正在加载的是Excel文件,因此,在这个excel文件中,最右边的列在前几个记录行/行上是空白的,而这些列最终完全是空白的列,即使下面的许多行都有值,然后它再次跳过,没有值。这是我使用的代码: