当我在VBA中使用CopyFromRecordset转换Excel电子表格中的数据时,只传输了少数记录集数据

当我在VBA中使用CopyFromRecordset转换Excel电子表格中的数据时,只传输了少数记录集数据,vba,excel,ado,recordset,Vba,Excel,Ado,Recordset,在VBA中,我很难找出CopyFromRecordset方法的错误。以下是电子表格中的图片: 如您所见,并非所有列都已填充。这是我的代码副本: Private Sub btnRecherche_Click() Dim rsRecherche As New ADODB.Recordset Dim ws As New Worksheet Set ws = Worksheets(11) Select Case cmbRechercheType.Value Case "offre" I

在VBA中,我很难找出CopyFromRecordset方法的错误。以下是电子表格中的图片:

如您所见,并非所有列都已填充。这是我的代码副本:

    Private Sub btnRecherche_Click()
Dim rsRecherche As New ADODB.Recordset
Dim ws As New Worksheet
Set ws = Worksheets(11)

Select Case cmbRechercheType.Value
Case "offre"
    If chk10der.Value = True Then 
        Set rsRecherche = getOffres(True)
    ElseIf txtIDStart <> "" And txtIDEnd <> "" Then 
        Set rsRecherche = getOffres(False, CInt(txtIDStart.Text), CInt(txtIDEnd.Text))
    Else 'Tout afficher
        Set rsRecherche = getOffres
    End If
Case "candidature"
    If chk10der.Value = True Then
调用数据库的函数,因为是的,我没有使用Excel或Access作为我的数据库,而是使用HeidiSQL:

    Public Function getOffres(Optional ByVal der As Boolean = False, Optional ByVal startID As Integer = -1, Optional ByVal endID As Integer = -1) As ADODB.Recordset
Dim sqlQuery As String
Set connect = New ADODB.Connection
connect.Open connString

Set rs = New ADODB.Recordset

If der Then
    sqlQuery = "SELECT * FROM offre ORDER BY offre_ID desc LIMIT 10;"
ElseIf startID <> -1 And endID <> -1 Then
    If startID > endID Then
        MsgBox "La plage de numéro des enregistrements est incorrect !"
        Exit Function
    End If
    sqlQuery = "SELECT * FROM offre WHERE offre_ID >= " & startID & " AND offre_ID <= " & endID & ";"
Else
    sqlQuery = "SELECT * FROM offre INNER JOIN source ON offre.source_ID = source.source_ID;"
End If

rs.Open sqlQuery, connect

Set getOffres = rs
End Function
在最后一张图片中,代码按照我的要求进入了Else部分


编辑:当我遇到这个问题时,我正在寻找答案:这是唯一返回他所有数据的记录。我检查了数据库中的其他条目是否存在差异,但找不到任何差异。

我已经找到了一个解决方案,但没有使用CopyFromRecordset,下面是代码副本:

If rsRecherche.Fields.Count > 0 Then
    'On rentre les données dans les cellules
    Range("Q13:AI660").ClearContents
    For col = 0 To rsRecherche.Fields.Count - 1
        ws.Cells(13, col + 17).Value = rsRecherche.Fields(col).Name
    Next
    ws.Range(ws.Cells(13, 17), ws.Cells(13, rsRecherche.Fields.Count)).Font.Bold = True
    'ws.Range("Q14").CopyFromRecordset rsRecherche

    row = 14
    While Not (rsRecherche.EOF)
        For fillCol = 0 To rsRecherche.Fields.Count - 1
            ws.Cells(row, fillCol + 17).Value = rsRecherche.Fields.Item(fillCol)
        Next
        rsRecherche.MoveNext
        row = row + 1
    Wend
End If

无法上传最后一张照片,因为我没有10个声望点…你只得到10张记录吗?嗨@ManishChristian我听从了你的建议,谢谢你的评论@CLR不,我有200多条记录,但12列中只有3列被填满。尽管:由于某些原因,记录N°256被填充,我想尝试将其更改为ws.RangeQ14.CopyFromRecordset rsRecherche。如果要从第14行和第Q列开始复制。
If rsRecherche.Fields.Count > 0 Then
    'On rentre les données dans les cellules
    Range("Q13:AI660").ClearContents
    For col = 0 To rsRecherche.Fields.Count - 1
        ws.Cells(13, col + 17).Value = rsRecherche.Fields(col).Name
    Next
    ws.Range(ws.Cells(13, 17), ws.Cells(13, rsRecherche.Fields.Count)).Font.Bold = True
    'ws.Range("Q14").CopyFromRecordset rsRecherche

    row = 14
    While Not (rsRecherche.EOF)
        For fillCol = 0 To rsRecherche.Fields.Count - 1
            ws.Cells(row, fillCol + 17).Value = rsRecherche.Fields.Item(fillCol)
        Next
        rsRecherche.MoveNext
        row = row + 1
    Wend
End If