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

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

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

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

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

Ответы [ 7 ]

30 голосов
/ 02 марта 2011

Могу предложить два варианта

  1. Прямая копия

Исходя из вашего описания, я предполагаю, что вы делаете что-то вроде

Set wb2 = Application.Workbooks.Open("YourFile.xls")
wb2.Sheets("YourSheet").[<YourRange>].Copy
ThisWorkbook.Sheets("SomeSheet").Paste
wb2.close

Если это так, вам не нужно копировать через буфер обмена. Этот метод копирует из источника в место назначения напрямую. Нет данных в буфере обмена = нет приглашения

Set wb2 = Application.Workbooks.Open("YourFile.xls")
wb2.Sheets("YourSheet").[<YourRange>].Copy ThisWorkbook.Sheets("SomeSheet").Cells(<YourCell")
wb2.close
  1. Подавить подсказку

Вы можете предотвратить все всплывающие окна с предупреждением, установив

Application.DisplayAlerts = False

[Изменить]

  1. Для копирования только значений : вообще не использовать копирование / вставку

Dim rSrc As Range
Dim rDst As Range
Set rSrc = wb2.Sheets("YourSheet").Range("YourRange")
Set rDst = ThisWorkbook.Sheets("SomeSheet").Cells("YourCell").Resize(rSrc.Rows.Count, rSrc.Columns.Count)
rDst = rSrc.Value
14 голосов
/ 25 июня 2014

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

Application.CutCopyMode = False
3 голосов
/ 04 марта 2011

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

ActiveCell.Copy

Крис

0 голосов
/ 09 октября 2018

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

Application.CutCopyMode=False
ActiveWindow.Close
0 голосов
/ 17 января 2017

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

0 голосов
/ 13 мая 2016

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

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)
0 голосов
/ 24 июля 2014

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

Sub Auto_Close()

     ThisWorkbook.Saved = True

End Sub

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

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