Помогите мне оптимизировать код VBA Excel для копирования определенных столбцов каждой строки на листе в другой - PullRequest
1 голос
/ 26 июля 2010

Мне нужно скопировать определенные столбцы каждой строки в листе A на лист B.

Я создал подпрограмму, которая создает 2 массива (варианты) совпадающих номеров столбцов, поэтому я могу сопоставить столбец 3 на листе A с тем, чтобы он был равен столбцу 8 на листе B и т. Д.

Все отлично работает, дело в том, что довольно медленно, вот оно:

Sub insertIntoSelectedOpps(opCols As Variant, siebelCols As Variant, ByVal length As Integer)

Dim insertRange As Range
Dim siebelRange As Range
Dim rowCount As Integer

Set insertRange = shSelected.Range("a3", "bb4") 'very wide table!'
Set siebelRange = shDatabase.UsedRange.Rows

rowCount = siebelRange.Rows.count

MsgBox "siebel row count: " & rowCount

For i = 2 To rowCount

    Set insertRange = shSelected.Range("a3", "bb4")
    insertRange.Insert

    For x = 1 To length - 1
        If opCols(x) <> -1 Then 'unequal to -1'
            insertRange.Cells(1, opCols(x)).value = siebelRange.Cells(i, siebelCols(x)).value
        End If
    Next x

Next i
End Sub

Не беспокойтесь о случае IF, это бизнес-логика, если имя столбца в отображении не найдено.

1 Ответ

3 голосов
/ 26 июля 2010

Обычно хорошей идеей является прекращение обновления экрана и расчета перед большой обработкой:

После msgbox:

Application.ScreenUpdating = False
xlCalc = Application.Calculation
Application.Calculation = xlCalculationManual

После next

Application.Calculation = xlCalc
Application.ScreenUpdating = True

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

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