Отключить предупреждение: вы скопировали большой объем данных в буфер обмена - PullRequest
4 голосов
/ 14 марта 2009

Во время отладки запросов, написанных в MS Access 2007 (проблема была одинаковой во всех предыдущих версиях), я выполню запрос и затем скопирую результаты в Excel. В зависимости от результатов я переключаю пакет на Access, чтобы уточнить результаты и вернуться в режим разработки запроса. В этот момент я получаю досадное предупреждение: you copied a large amount of data onto the clipboard. ...Do you want to save this data on the clipboard? Я никогда не хотел этого делать.

Буфер обмена MS Office отключен, поэтому эта функция выполняется со стандартным буфером обмена Windows. Есть ли способ отключить предупреждение и принять Нет по умолчанию?

Ответы [ 7 ]

3 голосов
/ 04 августа 2011

Существует очень простое решение для этого. Предупреждение появляется только в том случае, если в буфере обмена находится БОЛЬШОЕ количество материала. Поэтому, прежде чем закрыть, убедитесь, что там есть только небольшое количество материала.

Например, в макросе, который я написал, я делаю это:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Windows("iostatZd15.1").Activate
ActiveWindow.WindowState = xlNormal
ActiveSheet.Range("A1").Copy
ActiveWindow.Close

Вторая последняя строка (непосредственно перед закрытием) - это «пустышка» - команда, которая просто заменяет текущий (БОЛЬШОЙ) буфер обмена очень маленьким объемом данных. Это работает.

1 голос
/ 19 июля 2009

Вы можете установить событие OnClose формы, чтобы очистить буфер обмена.

Поместите приведенный ниже код в модуль в вашей базе данных.

Private Declare Function apiOpenClipboard Lib "User32" Alias
"OpenClipboard" (ByVal hWnd As Long) As Long

Private Declare Function apiEmptyClipboard Lib "User32" Alias
"EmptyClipboard" () As Long

Private Declare Function apiCloseClipboard Lib "User32" Alias
"CloseClipboard" () As Long

Function EmptyClipboard()
  If apiOpenClipboard(0&) <> 0 Then
    Call apiEmptyClipboard
    Call apiCloseClipboard
  End If
End Function

Затем в событии Close вашей формы используйте:

EmptyClipboard
1 голос
/ 15 марта 2009

По моему опыту, вы получаете это сообщение только при закрытии приложения. Вы закрываете Excel перед возвратом в Access? Если это так, не закрывайте его и посмотрите, не пришло ли вам сообщение.

РЕДАКТИРОВАТЬ после попытки инструкции для получения ошибки:

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

  DoCmd.SetWarnings False

И вы захотите включить его после того, как закончите редактирование.

Но запускать этот код негде, поскольку вы просто используете пользовательский интерфейс Access для редактирования запроса.

Я не совсем понимаю , почему это предупреждение считается проблемой. Может быть, вы вставляете, возвращаетесь в представление дизайна, меняете критерии, снова запускаете, снова вставляете? Если это так, отключение SetWarnings может помочь.

Если вы хотите, чтобы это происходило автоматически, вы можете использовать объект Screen.ActiveDatasheet для этого. Что вы хотели бы сделать, это написать функцию:

  Public Function ChangeWarnings(bolSetting As Boolean) As Boolean
    DoCmd.Setwarnings bolSetting
  End Function

... затем, когда вы открываете свой запрос в виде таблицы, в окне Immediate введите следующие две строки:

  Screen.ActiveDatasheet.OnActivate = "=ChangeWarnings(False)"
  Screen.ActiveDatasheet.OnDeactivate = "=ChangeWarnings(True)"

Вы также можете написать код, который настроит это для вас.

Одно примечание - оно не «прилипает» к объекту Screen.ActiveDatasheet при открытии или закрытии другого объекта. Он применяется только к таблице данных, которая активна при назначении действий события.

1 голос
/ 14 марта 2009

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

  1. Закройте все работающие программы.
  2. Нажмите Пуск, а затем нажмите Выполнить. Введите regedit и нажмите ОК.
  3. В редакторе реестра нажмите, чтобы выбрать следующий подраздел (папку): HKey_CURRENT_USER\Software\Microsoft\Office\9.0\Common\General
  4. В меню «Правка» выберите «Создать» и нажмите «Значение DWORD». Выберите новое значение # 1, введите AcbControl и нажмите клавишу ВВОД.
  5. В меню «Правка» выберите «Изменить». В диалоговом окне «Редактировать значение DWORD» нажмите «Десятичное число» в разделе «База». Введите 1 в поле Значение. Нажмите кнопку ОК и выйдите из редактора реестра.

ПРИМЕЧАНИЕ. Нельзя отключить (или включить) буфер обмена Office только для одной программы Office, изменив реестр.

Вот статья MS KB

0 голосов
/ 02 декабря 2017

Я постоянно сталкиваюсь с этой проблемой. Это кажется глупым, но следующее решение убивает его.

' Copy something small into the clipboard
Range("A1").Copy

' Turn off CutCopyMode i.e., the "crawling ants"
' Application.CutCopyMode = False solves a lot of problems, I do it as a precaution after I copy anything
Application.CutCopyMode = False

CutCopyMode = FALSE не отключает копирование всего буфера обмена (как указано другим автором)

0 голосов
/ 29 января 2014

Application.CutCopyMode = False

0 голосов
/ 14 октября 2009

Для Excel:

Fexcel = New Microsoft.Office.Interop.Excel.Application
Fexcel.DisplayAlerts = False

То же самое для доступа

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