Я использую цикл вместо copyfromrecordset для двух столбцов, которые прерывают copyfromrecordset по неизвестной причине. Когда я прохожу через это, требуется более двух минут, чтобы сделать 800 строк, которые кажутся очень медленными. Copyfromrecordset может ввести 800 строк в 10 раз больше столбцов менее чем за 20 секунд. Может ли кто-нибудь сказать, что делает цикл настолько медленным?Slow VBA Loop - Paste from Recordset
Set rng = Activesheet.Range("P2")
Row = 0
Do While Not Rs1.EOF
For col = 0 To Rs1.Fields.Count - 1
rng.Offset(Row, col).Value = Rs1(col)
Next col
Row = Row + 1
Rs1.MoveNext
Loop
Это медленный, потому что он обращается к каждому отдельному полю в наборе записей и обновляет рабочий лист для каждого отдельного поля. ('CopyFromRecordset' просто переносит весь набор записей на рабочий лист за один шаг передачи.) – YowE3K
Используете ли вы один адрес ячейки при попытке« CopyFromRecordset »? 'CopyFromRecordset' лучше всего работает, когда диапазон относится к левой левой ячейке, независимо от размера набора записей. Если 'CopyFromRecordset' вызывает проблемы, вы можете рассмотреть функцию« GetRows », которая вернет данные в виде массива, тогда вам нужно будет перенести массив и вставить массив * whole * за один шаг. – ThunderFrame
Я большой поклонник этого предложения ^^^^^^^ –