Excel 2010 VBA: как вставлять специальные строки в диапазон строк и поддерживать построчное условное форматирование - PullRequest
0 голосов
/ 29 мая 2019

Excel 2010:

Этот вопрос относится конкретно к использованию PasteSpecial с Условное форматирование .

Обзор: У меня есть строка шаблона, сохраненная на другом листе.Эта строка содержит примерно 350 столбцов и многочисленные форматы, формулы и условное форматирование.

Данные загружаются из SQL Server и содержат N строк - обычно от 400 до 15000.

Выполнение:

Я копирую строку шаблона и вставляю требуемые строки чисел:

AryVariant = rst_ADODB.GetRows
lRecordCount = UBound(AryVariant, 2) + 1

Templates.Range("TEMPLATE_ROW").Copy
sheet1.Range(sheet1.Range("Range_Start").Offset(1, 0), sheet1.Range("Range_Start").Offset(lRecordCount, 0)).EntireRow.Insert Shift:=xlDown

Копирование с другого листа, подобного этому, в диапазон приводит к путанице формул и условному форматированию, ноХорошо копирует форматы ячеек, поэтому я возвращаюсь через диапазон, чтобы обновить формулы и условное форматирование:

Templates.Range("TEMPLATE_ROW").Copy
sheet1.Range(sheet1.Range("Range_Start").Offset(1, 0), sheet1.Range("Range_Start").Offset(lRecordCount, 0)).EntireRow.PasteSpecial xlPasteFormats

Проблема:

Пока это работает для формул, он объединяет строки в условном форматировании в части «Применяется к», оставляя формулу в правиле, ссылаясь на верхнюю строку в диапазоне.Пример (не знаю, как показать эту часть, поскольку я не могу загрузить изображения):

Формула:"= $ FB18"

Формат: Какой-то формат здесь

Применяется к:"= $ D $ 18: $ M $ 11436, $ O $ 18: $ AC $ 11436"

Желаемый результат:

Я хочу, чтобы каждая строка была автономной, поэтому:

Формула:"= $ FB18"

Формат: Некоторые форматы здесь

Относится к:"= $ D $ 18:$ M $ 18, $ O $ 18: $ AC $ 18 "

Формула: " = $ FB19 "

Формат: Некоторые форматыздесь

Применяется к:"= $ D $ 19: $ M $ 19, $ O $ 19: $ AC $ 19"

Обходной путь:

В настоящее время я применяю обход за строкой PasteSpecial в качестве обходного пути:

For r = 0 To UBound(AryVariant, 2)
    Templates.Range("TEMPLATE_ROW").Copy
    sheet1.Range("sheet1_Dataset").Offset(r + 1, 0).EntireRow.PasteSpecial xlPasteFormats
Next r

Хотя это работает, это ужасно медленно с большими наборами данных.

Наконец, вопрос:

Есть ли способ получитьжелаемый результат при применении форматов к диапазону в целом?

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