Ошибка при копировании больших наборов данных (500 тыс. Записей) между листами с использованием метода rng.value = rng.value - PullRequest
0 голосов
/ 23 апреля 2020

Я ищу оптимальное копирование больших наборов данных (500 тыс. Записей) из одной рабочей книги в другую. Я использую следующую строку кода:

Sheet13.Range("A2:D" & last).Value2 = OpenBook.Sheets(1).Range("A2:D" & last).Value2

Я попытался отладить, и теперь, что происходит, он копирует все записи правильно, пока не найдет ячейку со следующим значением, начинающимся с "=": например одна из ячеек имела значение "= Ab c d c"

Я хочу сделать копию оптимальным образом, и цикл для проверки и удаления = выглядит неправильно.

Любая помощь будет оценена.

Ответы [ 3 ]

1 голос
/ 23 апреля 2020

Почему бы не попробовать использовать массив?

    Dim myArray() as Variant

    myArray = Sheet13.Range("A2:D" & last).Value

    OpenBook.Sheets(1).Range("A2").Resize(UBound(myArray,1), UBound(myArray,2)).Value = myArray
0 голосов
/ 23 апреля 2020

OK,

Поскольку копирование листа между книгами не работает, вы также можете копировать столбцы между двумя книгами:

Workbooks("steer.xlsm").Worksheets("Report2").Range("A:D").Copy Workbooks("rsformat.xlsx").Worksheets("test2").Range("A:D")

Это сохранит все в столбце E и далее в конечный лист и должен выполняться быстрее, чем загрузка данных в массив.

С уважением,

0 голосов
/ 23 апреля 2020

Просто используйте Worksheet.Copy и затем переименуйте лист:

Sub sCopySheet(wsSource As Worksheet, strName As String)
    wsSource.Select
    wsSource.Copy Before:=Workbooks("rsFormat.xlsx").Sheets(1)
    Workbooks("rsFormat.xlsx").Sheets(1).Name = strName
End Sub

Sub sTestCopy()
    Call sCopySheet(Worksheets("20Apr'20"), "test2")
End Sub

С уважением,

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