Ms access 禁用警告:您已将大量数据复制到剪贴板上
在调试MS Access 2007中编写的查询时(问题在所有以前的版本中也是一样的),我将运行查询,然后将结果复制到Excel中。根据结果,我将batch切换到Access以优化结果并返回查询的设计模式。此时,我得到了一个恼人的警告:Ms access 禁用警告:您已将大量数据复制到剪贴板上,ms-access,vba,ms-office,ms-access-2007,Ms Access,Vba,Ms Office,Ms Access 2007,在调试MS Access 2007中编写的查询时(问题在所有以前的版本中也是一样的),我将运行查询,然后将结果复制到Excel中。根据结果,我将batch切换到Access以优化结果并返回查询的设计模式。此时,我得到了一个恼人的警告:您将大量数据复制到了剪贴板上。。。是否要将此数据保存在剪贴板上?我从未想过要这样做 MS Office剪贴板已禁用,因此此功能将在标准Windows剪贴板上执行。有没有办法禁用警告并将“否”设为默认值?我认为您可能必须禁用MS剪贴板。试试这个: 退出正在运行的所有程
您将大量数据复制到了剪贴板上。。。是否要将此数据保存在剪贴板上?
我从未想过要这样做
MS Office剪贴板已禁用,因此此功能将在标准Windows剪贴板上执行。有没有办法禁用警告并将“否”设为默认值?我认为您可能必须禁用MS剪贴板。试试这个:
HKey\u CURRENT\u USER\Software\Microsoft\Office\9.0\Common\General
根据我的经验,只有在关闭应用程序时才会收到此消息。是否在返回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对象时,它不会“粘住”Screen.ActiveDatasheet对象。它仅适用于分配事件操作时处于活动状态的数据表。您可以设置窗体的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
对于Excel:
Fexcel = New Microsoft.Office.Interop.Excel.Application
Fexcel.DisplayAlerts = False
对Access执行相同的操作有一个非常简单的解决方案。只有当剪贴板上有大量内容时,才会出现警告消息。因此,在你关门之前,确保那里只有少量的东西 例如,在我编写的宏中,我执行以下操作:
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("iostatZd15.1").Activate
ActiveWindow.WindowState = xlNormal
ActiveSheet.Range("A1").Copy
ActiveWindow.Close
最后的第二行(紧靠结束前)是一个“虚拟”命令—一个用非常少量的数据简单地替换当前(大)剪贴板的命令。它可以工作。Application.CutCopyMode=False我一直遇到这个问题。必须这样做似乎很愚蠢,但下面的解决方案会让它死掉
' 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不会关闭所有剪贴板复制(如另一张海报所述)谢谢您提供的信息。office剪贴板已经被禁用,因为我很少复制周围的多个内容。我将对问题进行编辑,以澄清这一点。嗨,大卫-我当然尊重你的意见-但不,我不会关闭Excel。打开Access,运行查询,复制结果,打开excel,粘贴结果,选择Access并选择设计视图,获取警告。感谢您的建议,但我正在直接运行查询;没有可以附加任何事件的表单。但也许我可以有一个表单,在Access获得焦点时清除剪贴板。嗯。消息来自Access,因此这不会有任何影响。小心;这将禁用所有剪贴板复制;提问者说他只想“根据结果”来做这件事。
' 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