我有各种代码来创建报表。报表被添加到一个新的工作簿中,该工作簿不会被保存,其原理是用户可以选择是保存工作簿还是在查看结果后关闭它。下面的代码将激活未保存的工作簿。
Sub ActivateWorkbook(wbResults As Workbook)
Dim objWindow As Window
With Application
.VBE.MainWindow.WindowState = vbext_ws_Minimize
For Each objWindow In .Windows
With objWindow
If .Caption <> wbResults.Name Then .WindowState = xlMinimized
End With
Next objWindow
With .Windows(wbResults.Name)
.WindowState = xlMaximized
.Activate
End With
End With
End Sub
这在单个监视器上可以正常工作。但是如果已经有多个工作簿,并且它们是不同的监视器,它会最小化两个(所有)监视器中的窗口,看起来不太理想。我在想,如果我能够识别哪个监视器有活动工作簿,我只能最小化该监视器的窗口(如果需要,包括VBE)。
作为对chris neilsen的回复,我将包含一些基本的代码来说明我用什么来调用上面的过程。请记住,每个过程的目的是不同的,每个过程中的大多数代码实际上并不适合这个特定的问题。
Sub ExampleCode()
Dim wbXXX As Workbook
Set wbXXX = Workbooks.Add
With wbXXX
'Main code here
End With
Call ActivateWorkbook(wbXXX)
Set wbXXX = Nothing
End Sub
感谢任何想帮忙的人。很感激。
2条答案
按热度按时间y1aodyip1#
好吧,这似乎对我有用。它不太好。注意,需要“Microsoft Visual Basic for Applications Extensibility 5.3”来最小化VBE,VBE是运行代码的地方,而不是主Excel应用程序。无论如何,Activate在过去对我来说并不可靠。如果它对你有用,我想就不需要这些了。如果有人愿意测试它,请让我知道你怎么去。我只测试了一个双显示器设置到目前为止。
目的:当“激活”不起作用时,在与活动工作簿相同的监视器中显示新工作簿。
uinbv5nw2#
这应该足够了-不需要第二个子激活。2这些应该在前台显示新的工作簿,没有其他窗口改变。