打印已经打开的 Internet Explorer
Print already opened Internet explorer
我正在尝试打印已打开但无法运行的 Internet Explorer 页面。代码如下:
Sub Already_Opened()
On Error Resume Next
Set objShell = CreateObject("Shell.application")
intWinCnt = objShell.Windows.Count
For intWinNo = 0 To (intWinCnt - 1)
StrWinTitle = objShell.Windows(intWinNo).Document.Title
If StrWinTitle = "Google" Then
Set IE = objShell.Windows(intWinNo).Document
Exit For
End If
Next
Const OLECMDID_PRINT = 6
Const OLECMDEXECOPT_DONTPROMPTUSER = 2
'Search box
IE.getElementsByClassName("gLFyf gsfi")(0).Value = "Earth"
'Search result Button
IE.getElementsByClassName("gNO89b")(0).Click
'Wait 5 Sec
Application.Wait Now + TimeValue("00:00:05")
'Print
IE.execWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
End Sub
当我使用 Excel VBA 打开并导航到 Internet Explorer 然后打印时,它工作正常。以下代码有效:
Sub New_IE()
Const OLECMDID_PRINT = 6
Const OLECMDEXECOPT_DONTPROMPTUSER = 2
Dim IE As Object
Dim Doc As HTMLDocument
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate "https://www.google.co.uk/"
Do While IE.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
Set Doc = IE.Document
'Search box
Doc.getElementsByClassName("gLFyf gsfi")(0).Value = "Earth"
'Search result Button
Doc.getElementsByClassName("gNO89b")(0).Click
'Print
Application.Wait Now + TimeValue("00:00:05")
IE.execWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
End Sub
我尝试检查两个示例代码并找到了问题的原因。
您说打印代码适用于第二个代码示例,但不适用于第一个代码示例。
如果您检查打印页面的代码行,您会注意到您正在使用 IE 浏览器对象。 (在第二个例子中)
如果您看到第一个代码示例,您会注意到您正在将 IE 文档 分配给 IE 对象。
Set IE = objShell.Windows(intWinNo).Document
您需要分配 IE 浏览器对象 而不是 文档对象 才能解决此问题。
下面是修改后的代码,可以正常工作。
Sub Already_Opened()
Dim IE As Object
On Error Resume Next
Set objShell = CreateObject("Shell.application")
intWinCnt = objShell.Windows.Count
For intWinNo = 0 To (intWinCnt - 1)
StrWinTitle = objShell.Windows(intWinNo).document.Title
If StrWinTitle = "Google" Then
Set IE = objShell.Windows(intWinNo)
Exit For
End If
Next
Const OLECMDID_PRINT = 6
Const OLECMDEXECOPT_DONTPROMPTUSER = 2
'Search box
IE.document.getElementsByClassName("gLFyf gsfi")(0).Value = "Earth"
'Search result Button
IE.document.getElementsByClassName("gNO89b")(0).Click
'Wait 5 Sec
Application.Wait Now + TimeValue("00:00:05")
'Print
IE.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
End Sub
您可以尝试 运行 您身边的这个样本,让我们知道它是否适合您。让我们知道是否有任何不清楚的地方。我会尽力为它提供建议。
我正在尝试打印已打开但无法运行的 Internet Explorer 页面。代码如下:
Sub Already_Opened()
On Error Resume Next
Set objShell = CreateObject("Shell.application")
intWinCnt = objShell.Windows.Count
For intWinNo = 0 To (intWinCnt - 1)
StrWinTitle = objShell.Windows(intWinNo).Document.Title
If StrWinTitle = "Google" Then
Set IE = objShell.Windows(intWinNo).Document
Exit For
End If
Next
Const OLECMDID_PRINT = 6
Const OLECMDEXECOPT_DONTPROMPTUSER = 2
'Search box
IE.getElementsByClassName("gLFyf gsfi")(0).Value = "Earth"
'Search result Button
IE.getElementsByClassName("gNO89b")(0).Click
'Wait 5 Sec
Application.Wait Now + TimeValue("00:00:05")
'Print
IE.execWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
End Sub
当我使用 Excel VBA 打开并导航到 Internet Explorer 然后打印时,它工作正常。以下代码有效:
Sub New_IE()
Const OLECMDID_PRINT = 6
Const OLECMDEXECOPT_DONTPROMPTUSER = 2
Dim IE As Object
Dim Doc As HTMLDocument
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate "https://www.google.co.uk/"
Do While IE.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
Set Doc = IE.Document
'Search box
Doc.getElementsByClassName("gLFyf gsfi")(0).Value = "Earth"
'Search result Button
Doc.getElementsByClassName("gNO89b")(0).Click
'Print
Application.Wait Now + TimeValue("00:00:05")
IE.execWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
End Sub
我尝试检查两个示例代码并找到了问题的原因。
您说打印代码适用于第二个代码示例,但不适用于第一个代码示例。
如果您检查打印页面的代码行,您会注意到您正在使用 IE 浏览器对象。 (在第二个例子中)
如果您看到第一个代码示例,您会注意到您正在将 IE 文档 分配给 IE 对象。
Set IE = objShell.Windows(intWinNo).Document
您需要分配 IE 浏览器对象 而不是 文档对象 才能解决此问题。
下面是修改后的代码,可以正常工作。
Sub Already_Opened()
Dim IE As Object
On Error Resume Next
Set objShell = CreateObject("Shell.application")
intWinCnt = objShell.Windows.Count
For intWinNo = 0 To (intWinCnt - 1)
StrWinTitle = objShell.Windows(intWinNo).document.Title
If StrWinTitle = "Google" Then
Set IE = objShell.Windows(intWinNo)
Exit For
End If
Next
Const OLECMDID_PRINT = 6
Const OLECMDEXECOPT_DONTPROMPTUSER = 2
'Search box
IE.document.getElementsByClassName("gLFyf gsfi")(0).Value = "Earth"
'Search result Button
IE.document.getElementsByClassName("gNO89b")(0).Click
'Wait 5 Sec
Application.Wait Now + TimeValue("00:00:05")
'Print
IE.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
End Sub
您可以尝试 运行 您身边的这个样本,让我们知道它是否适合您。让我们知道是否有任何不清楚的地方。我会尽力为它提供建议。