【问题标题】:Disable clipboard prompt in Excel VBA on workbook close在工作簿关闭时禁用 Excel VBA 中的剪贴板提示
【发布时间】:2011-07-07 00:04:19
【问题描述】:

我有一个 Excel 工作簿,它使用 VBA 代码打开另一个工作簿,将一些数据复制到原始工作簿中,然后关闭第二个工作簿。

当我关闭第二个工作簿(使用 Application.Close)时,我收到提示:

是否要保存剪贴板。

VBA 中是否有可以绕过此提示的命令?

【问题讨论】:

  • 这是我学到的艰难方法:尽可能避免使用剪贴板!其他程序可能会在您的代码运行时读取/写入剪贴板,这将导致无法预测的结果。请注意,复制粘贴使用剪贴板(不安全),而克里斯尼尔森回答中的直接复制则不使用(因此是安全的)。

标签: vba excel clipboard


【解决方案1】:

我可以提供两种选择

  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

[编辑]

  1. 仅复制值:根本不要使用复制/粘贴

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.DisplayAlerts,请确保再次打开它(即使在错误情况下)。否则,下次有人点击并希望看到“您要保存”消息时可能会感到失望。
  • “单行”方法的一个问题是无法指定“xlpastevalues” - 回到剪贴板!
  • @dusiod 仅复制值,您根本不需要使用复制/粘贴。查看我的编辑
  • @user3307245 你是(部分)正确的。更新后的答案现在可以按预期工作(注意:其他用户拒绝了您的编辑)
  • “直接复制”还是使用了剪贴板。如果您在宏执行期间打开记事本并进行粘贴,您将从电子表格中获取数据。
【解决方案2】:

我过去曾遇到过这个问题 - 从外观上看,如果您在退出时实际上不需要剪贴板,那么您可以使用与我相同的简单解决方案。只需清除剪贴板即可。 :)

ActiveCell.Copy

【讨论】:

    【解决方案3】:

    如果我可以再添加一个解决方案:您可以使用以下命令简单地取消剪贴板:

    Application.CutCopyMode = False
    

    【讨论】:

    • 太棒了!谢谢
    • 在我的测试中,上述行的位置似乎很重要。例如,如果我在实际粘贴和此行之间执行其他操作,剪贴板提示会不断出现,但如果我将行 立即 放在我进行粘贴的行之后,那么它可以完美地工作。我不确定为什么会发生这种情况,或者是否可以复制,只是认为应该提及它,以防万一......
    【解决方案4】:

    如果您不想保存任何更改并且不希望在使用宏保存 Excel 文件时出现“保存”提示,那么这段代码可能对您有所帮助

    Sub Auto_Close()
    
         ThisWorkbook.Saved = True
    
    End Sub
    

    因为Saved 属性设置为True,Excel 的响应就像工作簿已经保存并且自上次保存后没有发生任何更改,因此没有保存提示。

    【讨论】:

      【解决方案5】:

      如果您替换该行,建议的解决方案编辑工作

      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)
      

      【讨论】:

        【解决方案6】:

        有一个简单的解决方法。仅当剪贴板中有大量数据时才会出现警报。只需在关闭工作簿之前复制一个随机单元格,它就不会再显示了!

        【讨论】:

        • Excel刚出来的时候可能是一个很大的数量,现在它通常可以忽略不计。
        【解决方案7】:

        在关闭之前清除剪贴板。

        Application.CutCopyMode=False
        ActiveWindow.Close
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-19
          • 1970-01-01
          • 2022-07-11
          • 2016-06-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多