Здравствуйте! Кто-нибудь сталкивался с проблемой работы функции PasteSpecial в 2013 Excel? Простой код копирует диапазон из одной книги copy и вставляет в другую книгу значениями (используя PasteSpecial xlpastevalues) Макрос писал на 2010 версии. Все отлично работает Но при запуске в 2013 некорректно отрабатывает PasteSpecial - вставляет данные не в тот диапазон Сейчас переделал код без copy/paste, просто присваиваю значения одного диапазона другому. (диапазон1.value=диапазаон2.value) Но не хотелось бы переделывать все макросы... Нашел похожее описании в пакете исправлений https://support.microsoft.com/ru-kz/help/2817505/description-of-the-excel-2013-hotfix-package-excel-x-none-msp-august-1 Но сейчас этот патч уже нельзя скачать, якобы все устранено в актуальных версиях office. При этом у меня точно установлены все обновления.
и ошибка при выполнении не возникает. Ошибка в том, что он вставляет данные не в тот диапазон Проверяю одновременно на 2х компах(excel 2010 и excel 2013). 2010 версия отрабатывает правильно Описание я нашел, но уже нельзя скачать, поэтому не знаю, что делать
Копирует диапазон из открытой книги в текущую книгу на отдельный лист Код записан в стандартном модуле. Должен был вставить данные, например, в 5 строку, а вставляет в 1. ....
Код
With ThisWorkbook.Sheets(1)
Cells(1,1).Resize(10, 1).Copy
.Cells(5,1).PasteSpecial xlPasteValues
End with
ТС в самом первом сообщении еще написал, что делал через rng1.Value = rng2.Value, но спец.вставка используется не только в одном коде и все переделывать весьма затратно Кстати, есть и еще одна причина отказываться от массива или присвоения значений диапазону посредством .Value = .Value: если диапазон большой, можно получить ошибку Out of memory, т.к. временный массив может просто не поместиться в доступную память. Дабы не питать надежд: .Value = .Value имеет тот же принцип(просто на лету создается временный виртуальный массив и все). Раз проблема ясна и есть даже патч, то скорее всего с наскоку её без этого самого патча не решить. Но можно попробовать поизголяться. Например, так:
Дмитрий(The_Prist) Щербаков, 1 вариант не сработал(скопировал не туда) во 2 варианте, видимо, пропущен .paste? (ругается. Или там подразумевается другой оператор вставки?)
qwerty64 написал: во 2 варианте, видимо, пропущен .paste?
нет, ничего не пропущено. Надо писать в одну строку. Сразу после Copy указывается диапазон для аргумента Destination(есть такой у метода Copy). Можно определить его и явно:
Юрий М, пока так и делаю. Но, во первых, хотелось бы избежать перестройки всех макросов под этот способ, а во вторых, Дмитрий выше описал минусы такого подхода
ADimov написал: так в 16 офисе тоже нужно лист активировать перед pastespecial...
Доказательства? Проверил тест из #15 на конфигурациях: Win10 + Excel 2016 (32-, ru) и Win10 + Excel 2016 (64-, en). Работает правильно. Макрос из #5 тоже работает правильно.
Дмитрий(The_Prist) Щербаков написал: есть и еще одна причина отказываться от массива или присвоения значений диапазону посредством .Value = .Value
И еще одна причина: возможное изменение данных. Текст "1.99" станет числом, текст "1/3" превратится в 3 января текущего года, ячейка со значением 'литерал' потеряет левый апостроф и т.п.