VBS Shell Application获取IE标签数异常及IE11第二标签访问失败求助
Let’s break down the most likely culprits for this inconsistent behavior and walk through actionable fixes—since your code works on 3 machines, the issue is almost certainly tied to a unique configuration on the problematic PC.
Possible Causes & Fixes
1. IE11 Tab Process Isolation Settings
IE11 uses tab process isolation (especially when Enhanced Protected Mode is enabled) which can block VBScript from accessing tabs running in a separate process. This is the most common machine-specific config issue:
- Open Internet Options → Security → Select the "Internet" zone → Click "Custom level..."
- Verify "Enable Protected Mode" matches the setting on your working test machines (inconsistent toggles here often break cross-tab access).
- Check Advanced → Browsing → Ensure "Enable tabbed browsing" is checked, and look for explicit settings like "Isolate tabs in separate processes" (some IE11 versions have this option).
If the InternetExplorer.Application object’s Tabs collection fails cross-process, switch to using Shell.Application to enumerate all IE windows instead:
Set shell = CreateObject("Shell.Application") For Each window In shell.Windows If InStr(window.FullName, "iexplore.exe") > 0 Then ' Match your target URL to identify the second tab If window.LocationURL = "your-target-url-here" Then ' Perform actions on this window/tab Exit For End If End If Next
2. Timing/Asynchronous Loading Delays
When clicking the Print button, the second tab loads asynchronously. The problematic machine might have slower IE performance, so your code is trying to access the tab before it’s fully initialized:
- Add explicit delays after triggering the Print button with
WScript.Sleep(start with 2000ms and adjust as needed). - Or use a loop to wait until the second tab exists and is fully loaded:
Set ie = CreateObject("InternetExplorer.Application") ' ... Your code to navigate to the first tab and click Print ... ' Wait for the second tab to appear and finish loading Do WScript.Sleep 500 Loop While ie.Tabs.Count < 2 Or ie.Tabs(2).ReadyState <> 4 ' ReadyState 4 = Fully loaded Set secondTab = ie.Tabs(2) ' Proceed with your actions on the second tab
3. Interfering IE Add-ons or Group Policies
Third-party add-ons (toolbars, security plugins) or restrictive Group Policies can block VBScript’s access to IE tabs:
- Test IE in No Add-ons Mode: Run
iexplore.exe -extofffrom Command Prompt, then run your VBScript. If it works, disable or remove suspicious add-ons via IE’s Manage Add-ons menu. - Check Group Policy: Open Local Group Policy Editor (
gpedit.msc) → User Configuration → Administrative Templates → Windows Components → Internet Explorer. Look for policies that restrict script access to IE objects or tab management.
4. VBScript & ActiveX Permission Settings
The problematic machine might have stricter security settings blocking VBScript from interacting with IE:
- Open Internet Options → Security → Custom level...
- Under "ActiveX controls and plugins", ensure:
- "Initialize and script ActiveX controls not marked as safe for scripting" is set to "Prompt" or "Enable" (match the setting from your working PCs).
- "Scripting of ActiveX controls marked safe for scripting" is set to "Enable".
5. IE11 Version & Update Discrepancies
Outdated IE11 updates can introduce object model inconsistencies:
- Compare the IE version on the problematic machine with working ones (Help → About Internet Explorer).
- Install the latest cumulative updates for IE11 via Windows Update to align its behavior with your test machines.
内容的提问来源于stack exchange,提问作者Đức Thanh Nguyễn

