У меня есть код, который находит данные в ячейке в листе 1 и вставляет его много раз, по одной ячейке за раз, в ячейки на другом листе. Что работает, ожидайте, что это займет довольно много времени и часто замораживает компьютер. Наверняка, есть способ вставить эти данные во все выделенные ячейки сразу или, по крайней мере, каким-то другим способом его оптимизации? Любая помощь приветствуется.VBA, вставляющий данные в большие куски
Dim sourcerange4 As Integer
Dim offset4 As Integer
Dim qproc As Integer
qproc = 1
sourcerange4 = 1
offset4 = 3
SourceRange3 = 1
Offset3 = 3
Do Until qproc = SourceRange * QuestRange
qproc = qproc + 1
Sheets(SourceSheet).Select
Cells(SourceRange3, Offset3).Copy
Sheets(RawData).Select
Do Until Cells(sourcerange4, offset4) = ""
sourcerange4 = sourcerange4 + 1
Loop
Sheets(RawData).Select
Cells(sourcerange4, offset4).Select
ActiveSheet.Paste
Loop
Если ваш код работает, как задумано, но просто медленно или неэффективно, я предлагаю вам взять всю процедуру (т.е. полного контекста) [codereview.se], где вы будете получать обратную связь по любому/все аспекты вашего кода, включая проблемы с производительностью. –
Ваш код не имеет никакого смысла. Как ваш внешний цикл Do завершается, поскольку SourceRange и QuestRange не определены и не действуют нигде? Существует несколько операторов .Select, которые ничего не делают, и ни одна из переменных имени листа не определена нигде. Действительно ли этот код работает? –
Что-то вроде 'Target.Value = Source.Value' переносит значения из диапазона' Source' в диапазон «Target» одновременно, без необходимости выбирать, копировать и вставлять (что почти всегда является плохой идеей в Excel VBA). Определите источники и целевые объекты (предпочтительно таким образом, чтобы это было более эффективно, чем цикл по ячейкам) и передавали данные в больших кусках. Также - не используйте 'Integer'. Он запрашивает проблемы в современных версиях Excel, поскольку допустимые индексы строк могут переполнять этот тип данных. Вместо этого используйте 'Long'. –