(Excel VBA): скопировать оставшиеся строки набора записей на второй лист - PullRequest
1 голос
/ 16 января 2020

У меня есть следующий код, который будет копировать результаты хранимой процедуры на лист Excel:

Set rs = cmd.Execute(, , adCmdStoredProc)
Worksheets("Sheet1").Rows("2:" & Rows.Count).CopyFromRecordset rs

В некоторых случаях результат выполнения процедуры сохранения превышает максимальный предел строк Excel лист может иметь (1048576 строк).

Итак, как в таких случаях можно улучшить код, чтобы оставшиеся строки после строки 1048576 были скопированы на второй лист? (пример: набор записей возвращает 1100000 строк (превышено ограничение в 51424 строки, как я могу поместить оставшиеся строки в следующую таблицу?)

Спасибо!

1 Ответ

0 голосов
/ 17 января 2020

Просто перейдите на другой лист и снова запустите CopyFromRecordset, чтобы скопировать оставшиеся строки, как этот фрагмент:

' A quick Cartesian product to get a recordset with over 1 million rows
' The two columns referenced are called A and B; both have over 1024 rows
' cn is the connection and rs is the recordset
rs.Open "SELECT [Sheet1$].[A], [Sheet2$].[B] FROM [Sheet1$], [Sheet2$];", cn

' Output the field names and the results
Dim fld As Object
Dim i As Integer

' Output the first 1048575 rows
With Worksheets("Sheet3")
    .UsedRange.ClearContents

    i = 0
    For Each fld In rs.Fields
        i = i + 1
        .Cells(1, i).Value = fld.Name
    Next fld

    .Cells(2, 1).CopyFromRecordset rs
End With

' Output any remaining rows
If Not rs.EOF Then
    With Worksheets("Sheet4")
        .UsedRange.ClearContents

        i = 0
        For Each fld In rs.Fields
            i = i + 1
            .Cells(1, i).Value = fld.Name
        Next fld

        .Cells(2, 1).CopyFromRecordset rs
    End With
End If

Вы можете расширить это до еще большего количества листов, зацикливаясь и проверяя rs.EOF каждый раз , Это было больше проблемой в Excel 97-2003, когда на листе было только 65K строк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...