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

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

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

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

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

6 ответов


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

  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

[Edit]

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

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

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

Application.CutCopyMode = False

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

ActiveCell.Copy

Крис


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

Sub Auto_Close()

     ThisWorkbook.Saved = True

End Sub

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


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


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

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)