4

在调试用 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 作为默认值?

4

7 回答 7

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)剪贴板的命令。有用。

于 2011-08-04T02:59:15.220 回答
1

我认为您可能必须禁用 MS 剪贴板。试试这个:

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

注意:您不能通过修改注册表来禁用(或启用)仅为单个 Office 程序的 Office 剪贴板。

这是MS 知识库文章

于 2009-03-14T12:50:10.427 回答
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 对象。它仅适用于分配事件操作时处于活动状态的数据表。

于 2009-03-14T22:16:09.737 回答
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

然后在表单的关闭事件中使用:

EmptyClipboard
于 2009-07-19T06:18:39.793 回答
0

对于 Excel:

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

对 Access 执行相同操作

于 2009-10-14T17:23:25.263 回答
0

Application.CutCopyMode = False

于 2014-01-29T00:29:00.213 回答
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 不会关闭所有剪贴板复制(如另一张海报所述)

于 2017-12-02T07:33:23.800 回答