Отключить запрос буфера обмена в Excel VBA при закрытии книги

У меня есть книга Excel, которая с помощью кода VBA открывает другую книгу, копирует некоторые данные в оригинал, а затем закрывает вторую книгу.

Когда я закрываю вторую книгу (используя Application.Close), я получаю запрос:

Вы хотите сохранить буфер обмена.

Есть ли в VBA команда, которая обходит это приглашение?


person Craig T    schedule 02.03.2011    source источник
comment
Я усвоил это на собственном горьком опыте: по возможности избегайте использования буфера обмена! Другие программы могут читать / записывать в буфер обмена во время выполнения вашего кода, что приведет к непредсказуемым результатам. Обратите внимание, что Copy-Paste использует буфер обмена (небезопасно), а прямое копирование, как в ответе Криса Нейлсена, нет (и, следовательно, безопасно).   -  person Jean-François Corbett    schedule 03.03.2011


Ответы (7)


Если можно, я добавлю еще одно решение: вы можете просто отменить буфер обмена с помощью этой команды:

Application.CutCopyMode = False
person Sergiu    schedule 25.06.2014
comment
Отлично ! Спасибо - person Wheeliam; 13.07.2018
comment
В моих тестах расположение вышеприведенной строки кажется важным. Например, если я выполняю другие операции между фактической вставкой и этой строкой, подсказка буфера обмена продолжает появляться, но если я помещаю строку сразу после строки, в которой я вставляю, то она работает отлично. Я не уверен, почему это происходит именно так и можно ли это воспроизвести, просто подумал, что об этом стоит упомянуть, на всякий случай ... - person Yin Cognyto; 22.12.2019

Я сталкивался с этой проблемой в прошлом - судя по всему, если вам действительно не нужен буфер обмена в момент выхода, вы можете использовать то же простое решение, что и я. Просто очистите буфер обмена. :)

ActiveCell.Copy
person Chris Rae    schedule 04.03.2011

Если вы не хотите сохранять какие-либо изменения и не хотите, чтобы при сохранении файла Excel с помощью макроса появлялась подсказка «Сохранить», то этот фрагмент кода может быть вам полезен.

Sub Auto_Close()

     ThisWorkbook.Saved = True

End Sub

Поскольку для свойства Saved задано значение True, Excel реагирует так, как если бы книга уже была сохранена и с момента последнего сохранения не произошло никаких изменений, поэтому запрос на сохранение не отображается.

person Anil Chahal    schedule 24.07.2014

Есть простой обходной путь. Предупреждение появляется только тогда, когда у вас в буфере обмена большой объем данных. Просто скопируйте случайную ячейку, прежде чем закрыть книгу, и она больше не будет отображаться!

person kid    schedule 17.01.2017
comment
возможно, когда Excel только вышел, это была большая сумма, а сейчас она зачастую ничтожна. - person mcmillab; 29.08.2018

Просто очистите буфер обмена перед закрытием.

Application.CutCopyMode=False
ActiveWindow.Close
person Raleigh Paenitz    schedule 08.10.2018

предлагаемое решение редактировать работает, если вы замените строку

Set rDst = ThisWorkbook.Sheets("SomeSheet").Cells("YourCell").Resize(rSrc.Rows.Count, rSrc.Columns.Count)

с участием

Set rDst = ThisWorkbook.Sheets("SomeSheet").Range("YourRange").Resize(rSrc.Rows.Count, rSrc.Columns.Count)
person Alessio Mistretta    schedule 13.05.2016

person    schedule
comment
Если вы отключите Application.DisplayAlerts, обязательно включите его снова (даже в случае ошибки). В противном случае в следующий раз, когда кто-то приблизится и ожидает увидеть сообщение «Не хотите ли вы сохранить», он может быть разочарован. - person Chris Rae; 04.03.2011
comment
Одна проблема с однострочным методом заключается в том, что нельзя указать значения xlpastevalues ​​- обратно в буфер обмена! - person dusio; 02.05.2013
comment
@dusiod только для копирования значений, вам вообще не нужно использовать копирование / вставку. Смотрите мое редактирование - person chris neilsen; 02.05.2013
comment
@ user3307245, вы (частично) правы. Обновленный ответ теперь работает должным образом (примечание: другие пользователи отклонили ваше изменение) - person chris neilsen; 14.02.2014
comment
Прямая копия все равно использовала буфер обмена. Если вы откроете Блокнот во время выполнения макроса и выполните вставку, вы получите данные из своей электронной таблицы. - person Fabien TheSolution; 21.06.2019