我有一个宏,可以将 4 张工作表从一个工作簿复制到一个新工作簿,并用另一个名称保存它。
不幸的是,消息框询问我是否希望将如此大量的数据提供给其他应用程序导致这项自动化工作变得略微手动化。
如果您能提供任何关于如何避免剪贴板消息框的提示,或者只是让它自动回答“否”,我将不胜感激。
答案1
我会修改宏。宏启动时关闭警报,宏完成时重新打开警报。即 Application.DisplayAlerts = False
答案2
问题在于Application.DisplayAlerts = False
它可能会隐藏您需要看到的警报。
粘贴后使用Application.CutCopyMode = False
,从剪贴板中删除大范围的链接。
答案3
我同意 Jon Peltier 的观点,“问题在于Application.DisplayAlerts = False
它可能会隐藏您需要查看的警报。”此外,您必须记住Application.DisplayAlerts = True
在完成后进行设置,因此每次粘贴都需要 3 行代码,并且如果您的程序在此之前中断,Application.DisplayAlerts = True
您将在不知情的情况下关闭警报,直到您退出 Excel。
Application.CutCopyMode = False
粘贴后我测试了他的建议,效果很好。以下是一个例子someSpreadsheet.xls
:
Workbooks.OpenText Filename:="someDirectory\someFile.txt", _
DataType:=xlDelimited, TextQualifier:=xlNone, _
Tab:=True
Cells.Select
Selection.Copy
Windows("someSpreadsheet.xls").Activate
ActiveSheet.Paste
Application.CutCopyMode = 0
Windows("someFile.txt").Activate
ActiveWorkbook.Close
答案4
我找到了有关此问题的 MS 文档。看来您可以在宏中使用几种不同的编程解决方案来解决这个问题。这取决于您要复制到剪贴板的具体内容。知识库 # 287392
以下是相关部分:
方法 2:退出 CutCopyMode
如果您使用 Visual Basic for Applications 宏来剪切或复制单元格,请在关闭工作簿的行之前插入以下行
workbook.Application.CutCopyMode = False
其中“工作簿”是您的工作簿对象。
注意:通过将 CutCopyMode 设置为 True 或 False,Excel 可能会取消剪切或复制模式。
方法 3:保存工作簿
如果您使用 Visual Basic for Applications 宏来剪切或复制单元格,请在关闭工作簿的行之前立即插入以下行
workbook.Save
其中“workbook”是您的工作簿对象。保存工作簿时,Excel 不再处于剪切或复制模式。