在对这篇文章的回答中,已打开IE窗口的VBA宏 CreateObject()被使用了两次,一次与"Shell.Application“连用,另一次与"InternetExplorer.Application”连用。
第一次用于引用已经打开或已处于活动状态的窗口时。
第二次使用它创建一个新的浏览器窗口。
Sub GetIE_LateBinding()
Dim IE As Object
With CreateObject("Shell.Application").Windows
If .Count > 0 Then
' Get IE
Set IE = .Item(0) ' or .Item(.Count - 1)
Else
' Create IE
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
End If
IE.Navigate "http://support.microsoft.com/kb/q176792/"
Set IE = Nothing
End With
End Sub我尝试了下面的代码。它每次都会产生一个新的IE窗口,即使已经打开了一个实例。
Public Sub Trial()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
End Sub我可以理解"InternetExplorer.Application“的行为--每次创建新的IE应用程序实例时,都会创建新的IE应用程序实例,从而创建新的窗口。但是"Shell.Application“似乎可以获取已经打开的应用程序实例,因此,我们可以浏览已经打开的IE窗口。看上去有点混乱。我遗漏了什么?
注意:我猜与class_initialize()有关的东西是"Shell.Application“。
发布于 2015-05-31 12:39:51
IE和Explorer以前是同一个程序,这就是为什么Shell.Application列出打开is的原因。它之所以这样做,是因为它们过去都是资源管理器窗口。你很幸运这能满足你的需要。
CreateObject用于创建一个新对象。
GetObject(filename)连接到打开的文件,如果不打开,则打开它。
Set xlBook = GetObject("C:\Users\David Candy\Documents\Super.xls")
msgbox xlbook.nameGetObject("","shell.application")连接到一个现有的对象,如果它没有运行,它就会失败。
Set GetExcelApp = GetObject("", "Excel.Application")
Msgbox GetExcelApp不要太执着于物体。许多对象只是像Shell.Application这样的函数库。您创建了一个新的函数库对象。
来自COM的帮助。 **组件自动化**将Visual映射到自动化 Visual提供了对自动化的完全支持。下表列出了Visual语句如何转换为OLE API。 Visual Basic语句OLE API
CreateObject (ProgID)CLSIDFromProgID CoCreateInstance QueryInterface获取IDispatch接口。
GetObject (filename, ProgID)CLSIDFromProgID CoCreateInstance QueryInterface用于IPersistFile接口。在IPersistFile接口上加载。QueryInterface以获得IDispatch接口。
GetObject (filename)CreateBindCtx为后续函数创建绑定上下文。MkParseDisplayName为BindMoniker返回一个名字符号句柄。BindMoniker返回指向IDispatch接口的指针。在名字柄上释放。在上下文中发布。
GetObject (ProgID)CLSIDFromProgID GetActiveObject on类ID. QueryInterface以获取IDispatch接口。
Dim x As New interface为接口查找CLSID。CoCreateInstance QueryInterface C微软公司。版权所有。
https://stackoverflow.com/questions/30554161
复制相似问题