我将 GetObject 与工作簿路径结合使用来创建新实例或获取现有 Excel 实例。如果它正在抓取现有的用户创建的实例,则应用程序窗口是可见的;如果相关工作簿路径关闭,它将打开并隐藏,但不会在屏幕上闪烁之前。Application.ScreenUpdating
对此没有帮助。
我不认为我可以使用Win32Api调用LockWindowUpdate,因为我不知道在文件打开之前我是获取还是创建。是否有其他一些 VBA 友好的方法(即 WinAPI)来冻结屏幕足够长的时间以获取对象?
EDIT:只是为了澄清,因为第一个答案建议使用应用程序对象...这些是重现此行为的步骤。
1. 打开 Excel——确保您只运行一个实例——保存并关闭默认工作簿。 Excel 窗口现在可见,但“空”
2.打开Powerpoint或Word,插入一个模块,添加以下代码
Public Sub Open_SomeWorkbook()
Dim MyObj As Object
Set MyObj = GetObject("C:\temp\MyFlickerbook.xlsx")
'uncomment the next line to see the workbook again'
'MyObj.Parent.Windows(MyObj.Name).Visible = True'
'here's how you work with the application object... after the fact'
Debug.Print MyObj.Parent.Version
End Sub
- 请注意 Excel 在现有实例中打开文件然后隐藏它时的闪烁...因为它是自动化的
- 但还要注意,在闪烁完成之前,没有可使用的应用程序对象。这就是为什么我正在寻找一些更大的 API 方法来“冻结”屏幕。
Try,
Application.VBE.MainWindow.Visible = False
如果这不起作用尝试
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal ClassName As String, ByVal WindowName As String) As Long
Private Declare Function LockWindowUpdate Lib "user32" _
(ByVal hWndLock As Long) As Long
Sub EliminateScreenFlicker()
Dim VBEHwnd As Long
On Error GoTo ErrH:
Application.VBE.MainWindow.Visible = False
VBEHwnd = FindWindow("wndclass_desked_gsk", _
Application.VBE.MainWindow.Caption)
If VBEHwnd Then
LockWindowUpdate VBEHwnd
End If
'''''''''''''''''''''''''
' your code here
'''''''''''''''''''''''''
Application.VBE.MainWindow.Visible = False
ErrH:
LockWindowUpdate 0&
End Sub
两者都在这里找到消除 VBProject 代码期间的屏幕闪烁
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)