Самый быстрый способ скопировать данные из таблицы на одном листе в определенные места на другом с помощью VBA - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть таблица с информацией на одном листе. У меня есть калькулятор на другом листе, где я загружаю данные, вносю изменения и сохраняю их обратно в таблицу.

В настоящее время в таблице хранится более 60 столбцов данных, которые необходимо вызвать в калькулятор. Когда было только 10 или 15 столбцов, это было довольно быстро. Теперь требуется время для загрузки / сброса / сохранения данных, и я постоянно добавляю к ним.

У меня есть 2 кнопки activex, загрузка и сохранение

При загрузке данных в калькулятор код выглядит так: Где dat - строка таблицы, на которую ранее ссылалась запись в коде.

Range("QQ_Phone1").Value = DD.Cells(dat, 5)
Range("QQ_Phone2").Value = DD.Cells(dat, 6)
Range("QQ_Email").Value = DD.Cells(dat, 7)
Range("QQ_Email2").Value = DD.Cells(dat, 8)

При сохранении данных код выглядит так:

DD.Cells(dat, 5) = Range("QQ_Phone1").Value
DD.Cells(dat, 6) = Range("QQ_Phone2").Value
DD.Cells(dat, 7) = Range("QQ_Email").Value
DD.Cells(dat, 8) = Range("QQ_Email2").Value

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

Есть ли более простой способ сделать это? Например, создать массив всей строки, в которой находятся данные, а затем заполнить именованные ячейки данными всего несколькими строками кода?

Заранее спасибо!

1 Ответ

0 голосов
/ 03 сентября 2018

Если вы этого еще не сделали, попробуйте использовать:

  1. Application.ScreenUpdating

    Отключите обновление экрана, чтобы ускорить код макроса. Ты не будешь может видеть, что делает макрос, но он будет работать быстрее.

    В начале вашего кода включите обновление экрана на false: Application.ScreenUpdating = False

    И включите его снова в конце кода: Application.ScreenUpdating = True

  2. Application.Calculation

    Всякий раз, когда вы обновляете ячейку, Excel выполняет процесс для пересчета книги. При работе непосредственно в Excel вы хотите, чтобы это происходило в 99,9% случаев (за исключением случаев, когда вы работаете с чрезвычайно большой книгой). Однако это действительно может замедлить ваш код VBA. Рекомендуется устанавливать ручные вычисления в начале макросов и восстанавливать вычисления в конце макросов. Если вам нужно пересчитать рабочую книгу, вы можете вручную указать Excel для расчета.

    Опять же, сначала включите его вручную: Application.Calculation = xlCalculationManual

    И в конце включите его снова автоматически: Application.Calculation = xlAutomatic

    Если вам нужно пересчитать формулы в вашем коде (например, чтобы скопировать правильные, пересчитанные значения), используйте calculate

    Подробнее здесь.

...