Excel DAO未正确读取所有记录集
我有两个函数,可以为我创建记录集,然后将其读入电子表格 然而,这个excel报告中有一些列的开头没有数据,出于某种奇怪的原因,它第一次没有从文件中读取整个列的数据 例如,某些类型的线有a、b、c列和值,有些在d、e、f列中,有些在g、h、i列中。例如,a,b,c是第一个有值的,但d到i是多个记录行的空白。这似乎是因为在将记录集放入工作表后,d到i的整个列范围都是空白的 为什么? 这是将数据放入电子表格的代码: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
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文件中,最右边的列在前几个记录行/行上是空白的,而这些列最终完全是空白的列,即使下面的许多行都有值,然后它再次跳过,没有值。这是我使用的代码: