禁用警告:您将大量数据复制到剪贴板上

时间:2009-03-14 12:39:36

标签: ms-access vba ms-office ms-access-2007

在调试用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剪贴板进行此功能。有没有办法禁用警告并假设No为默认值?

7 个答案:

答案 0 :(得分:3)

有一个非常简单的解决方案。仅当剪贴板上存在大量内容时才会出现警告消息。因此 - 确保在关闭之前只有少量的东西。

例如,在我写的宏中,我这样做:

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

倒数第二行(紧接在结束之前)是一个“虚拟” - 一个简单地用非常少量的数据替换当前(BIG)剪贴板的命令。它有效。

答案 1 :(得分:1)

我想你可能要禁用MS剪贴板。试试这个:

  1. 退出正在运行的所有程序。
  2. 单击“开始”,然后单击“运行”。键入regedit,然后单击“确定”。
  3. 在注册表编辑器中,单击以选择以下子项(文件夹):HKey_CURRENT_USER\Software\Microsoft\Office\9.0\Common\General
  4. 在“编辑”菜单上,指向“新建”,然后单击“DWORD值”。选择新值#1,键入AcbControl,然后按ENTER键。
  5. 在“编辑”菜单上,单击“修改”。在“编辑DWORD值”对话框中,单击“基数”下的“十进制”。在“数值数据”框中键入1。单击“确定”并退出注册表编辑器。
  6. 注意:您无法通过修改注册表来仅为单个Office程序禁用(或启用)Office剪贴板。

    这是MS KB article

答案 2 :(得分:1)

根据我的经验,您只在关闭应用程序时收到此消息。您在返回Access之前关闭Excel吗?如果是这样,请不要关闭它,看看你是否不再收到消息。

在尝试生成错误的说明后编辑:

避免错误消息的唯一方法是在进入设计视图之前关闭通知,如:

  DoCmd.SetWarnings False

在完成编辑后,您需要重新打开它。

但是没有地方可以运行此代码,因为您只是使用Access UI来编辑查询。

我不太明白为什么这个警告被认为是个问题。也许你正在粘贴,回到设计视图,改变标准,再次跑步,再次粘贴?如果是这样,关闭SetWarnings可能会解决问题。

如果您希望它自动发生,您可以想象使用Screen.ActiveDatasheet对象来执行此操作。你想要做的是写一个函数:

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

...然后当您在数据表视图中打开查询时,在立即窗口中,键入以下两行:

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

您当然也可以编写为您设置此代码的代码。

一个注意事项 - 当打开或关闭另一个对象时,它不会“粘贴”Screen.ActiveDatasheet对象。它仅适用于分配事件操作时处于活动状态的数据表。

答案 3 :(得分:1)

您可以将表单的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

答案 4 :(得分:0)

对于Excel:

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

为Access执行相同操作

答案 5 :(得分:0)

Application.CutCopyMode = False

答案 6 :(得分:0)

我一直遇到这个问题。这样做似乎很愚蠢,但是下面的解决方案将它杀死了。

' 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不会关闭所有剪贴板复制(如另一张海报所述)