【发布时间】:2020-10-03 11:52:10
【问题描述】:
我一直在处理宏,有时我需要打开一个文档,复制和编辑一些数据,然后返回到上一个文档以继续使用宏。我有一个 fileDialog,我运行它让用户选择文档,但问题是这会激活文档,即使在 ScreenUpdating 关闭的情况下也会导致屏幕闪烁。是否有替代 Workbooks.Open 我可以使用它不会激活新文档? Workbooks.Open 中的一项设置我可以更改以阻止它激活吗?一种在文档激活时阻止屏幕闪烁的方法?下面是 fileDialog 的代码和每边的几行代码:
Set fileDialog = Application.fileDialog(msoFileDialogFilePicker)
Application.ScreenUpdating = False
With fileDialog
.InitialFileName = "C:\Users\User\Documents"
.AllowMultiSelect = False
.Filters.Clear
.Title = dialogTitle
If .Show = False Then
Application.ScreenUpdating = True
MsgBox "No file chosen. Click Import Contact List to try again."
Exit Sub
End If
strPathFile = .SelectedItems(1)
End With
Set wbSource = Workbooks.Open(Filename:=strPathFile)
任何解决方案将不胜感激。
【问题讨论】:
-
目标文档中是否有宏?如果是这样,使用 Application.EnableEvents = False / True (就像 ScreenUpdating 一样)可能会有所帮助。我正在专门考虑目标文档中的 Workbook_Open;如果您自己的工作簿侦听应用程序级事件,这也是您自己的工作簿可能会拦截的内容。
-
文档中没有宏,似乎 Workbooks.Activate 覆盖了 Application.ScreenUpdating = False。我刚刚创建了一个示例来测试它:`Sub News() Application.ScreenUpdating = False Workbooks("Hours.xlsx").Activate Workbooks("Book1.xlsm").Activate Application.ScreenUpdating = True End Sub` 其中 Book1 .xlsm 是我刚刚创建的文档,而“Hours.xlsx”只是一个文档,我必须在没有任何方程式或宏或任何东西的情况下记录小时数。但即便如此,屏幕还是会闪烁。
-
您的代码中没有
Activate...我也刚刚创建了一个示例,ScreenUpdating = False没有任何闪烁。 -
如何调用 News() 子程序并看到闪烁?
-
Workbooks.Open 自动激活现在打开的文档。我添加了 Application.EnableEvents = False,但这似乎并没有解决它。我已经在更多的测试文档上进行了尝试,当 Workbooks.Activate 发生时,似乎没有什么可以阻止它闪烁。这不是特别明显,但我将目标文档中的一行单元格突出显示为黄色以使其更加明显。基本上,它会在返回之前闪烁到另一个文档的几分之一秒。知道是什么原因造成的,是否可以修复?
标签: vba excel excel-2016