在Excel中以编程方式隐藏活动工作簿

我正在开发一个基于工作簿的VBA项目。 该代码打开一个新的工作簿,并调用一个外部的API下载并插入一堆数据在这个新的工作簿的多个工作表。 我停用屏幕更新( Application.Screenupdating = False ),所以最初屏幕保持专注于原始工作簿,而API在后台下载其他工作簿中的数据。 但是,一旦API插入数据,屏幕切换到新的工作簿。 我怎样才能防止这种情况发生? 谢谢!

您要么保存并closures目标工作簿,要么在重新启动屏幕更新之前select原始工作簿。

隐藏活动工作簿是可能的

 ActiveWorkbook.Windows(1).Visible = False 

如果有问题的工作簿不是活动的,您可能需要将ActiveWorkbookreplace为适当的引用,或者如果工作簿具有多个窗口,则可以像For i = 1 To ActiveWorkbook.Windows.Count那样添加一个循环。

你可以尝试使用ShowWindow API函数:

 Public Declare Function ShowWindow Lib "user32.dll" _ (ByVal HWND As Long, ByVal nCmdShow As Long) As Long Const SW_HIDE as Long = 0 Const SW_SHOW as Long = 5 ShowWindow otherWorkbookApplication.Hwnd, SW_HIDE 'Your code here ShowWindow otherWorkbookApplication.Hwnd, SW_SHOW 

或者,LockWindowUpdate API函数(感谢Chip Pearson, http ://www.cpearson.com/excel/vbe.aspx):

 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