Здравствуйте. Товарищи, нужна помощь. При копировании макросом диапазона ячеек из файла в файл (или с листа на лист, не важно), вставленный диапазон остается выделенным. Если этот диапазон анализировать или обрабатывать далее этим же макросом это существенно замедляет работу макроса. Помогает строчка типа:
Код
cells(1, 1).Select
А потом уже дальнейший код по обработке. Но по-моему это какое-то корявое решение вопроса. Есть ли способ как-то убирать выделение вставленного диапазона?
Sub test()
ThisWorkbook.Sheets(2).Range(ThisWorkbook.Sheets(2).Cells(1, 1), ThisWorkbook.Sheets(2).Cells(3, 3)).Copy
ThisWorkbook.Sheets(1).Range(ThisWorkbook.Sheets(1).Cells(1, 1), ThisWorkbook.Sheets(1).Cells(3, 3)).PasteSpecial Paste:=xlPasteValues
End Sub
диапазон на первом листе остается выделенным после завершения макроса.
Но в других моментах(например, при спец.вставке форматов) - этот финт не пройдет и в любом случае надо будет делать перевыделение. Как вариант, чтобы не выделялся весь диапазон, можно после копирования нужных данных делать так:
Тем, что при перевыделении буфер не очищается. Но если копировать данные через массив как показал Дмитрий - то в буфере и так ничего не будет, тогде нет нужни ни сбрасывать, ни перевыделять.
etrusk написал: Но чем это лучше перевыделения? типа:
Тем, что если копируете данные не на активный лист(а то и в другую, не активную на данный момент книгу) - выделена будет ячейка на активном листе, а не на том, в который копировали. А если тупо указать лист перед Cells(Sheets(1).Cells.Select) - то вообще ошибку получите, если Лист1 не активен. Либо перед перевыделением придется еще и лист выделять, а то и книгу. Вы поэкспериментируйте чутка в различных ситуациях и с различными активными листами/книгами - тогда определите какой метод для Вашей ситуации наиболее подходит.
Если её закомментировать, заполнение таблицы графиком ППР происходит в 3 раза дольше. Обнаружил случайно. Изначально сделал перевыделение чисто для "эстетики", Через время, при доработке кода, убрал как ненужную. Оказалось что это крайне негативно влияет на скорость заполнения графика (выполнение макроса).
не эквивалентна специальной вставке значений (много раз наступал на эти грабли). В этом можно убедиться, например, на исходном диапазоне из 9 текстовых ячеек от 1.1 до 1.9
Здравствуйте! Не стала создавать новую тему, т.к. у меня похожий вопрос.
Подскажите, пожалуйста, команда
application.cutcopymode=false
очищает буфер обмена после копирования - вставки. А если в моем макросе предполагается несколько раз копировать - вставлять разные данные, то мне нужно эту команду по очистке буфера вставлять после каждой вставки и перед новым копированием или достаточно один раз перед End Sub?