我在Excel工作簿中工作,该工作簿调用Internet Explorer并将工作簿用户定向到登录页面以验证它们,然后从我们的服务器检索数据。我发现如果用户在IE中启用了“保护模式”(Internet选项 - >安全性),则在输入用户名和密码后,他们通常会在登录页面上“卡住”。当“保护模式”被禁用时,没有问题。
我正在尝试创建一个宏来检测他们的IE设置并通知用户是否启用了保护模式(如果可能的话,可能会使用PutProperty
方法为VBA更改此设置。我目前正在使用Microsoft Internet Controls参考。我试过的路线在下面(当然是在一个子程序中)。
Dim objBrowser As InternetExplorer
Dim vProtected As Variant
Set objBrowser = New InternetExplorer
'Opens IE and navigates to log-in page
'The code here works as expected
'No idea what to put in for arguments in GetProperty
vProtected = objBrowser.GetProperty("?")
我不确定GetProperty
实际返回的数据类型(因此是变体),我不知道在参数中传递什么。此外,如果这完全是错误的做法,我愿意采取新的行动方案。
InternetExplorer对象的GetProperty方法上的MSDN article不太有帮助。
值得一提的是,我对Microsoft Internet Controls和InternetExplorer对象都很陌生,这是我第一次使用它。
感谢您的时间和考虑!
答案 0 :(得分:2)
解决方案最终与我的目标截然不同。我已经辞职了,我必须使用注册表才能实现我想要的行为。虽然这是不可取的,但这是我最终在VBA中所做的事情。
这不是我的最终代码,因为我仍在处理该项目,但它已经足够了。
Dim obj_Shell
Dim v_Result As Variant
'Variable to capture user response
Dim v_Response As Variant
Set obj_Shell = CreateObject("WScript.Shell")
'CHECK INTERNET EXPLORER PROTECTED MODE SETTINGS
'Reads the registry key that determines whether 'Protected Mode' is enabled in internet explorer for the 'Internet' security zone
'as opposed to 'Local intranet' or 'Trusted Sites', etc.
'The 3 in the registry key path refers to the zone 'Internet'.
Debug.Print "Checking user's Internet Explorer protected mode settings..."
v_Result = obj_Shell.RegRead _
("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\2500")
Select Case v_Result
Case 0 'Protected Mode is enabled
Debug.Print " Protected mode is enabled!"
v_Response = MsgBox("Protected mode is enabled in Internet Explorer. " & _
"This may cause issues with your submission. " & _
"Would you like to disable protected mode?", vbYesNo, "Protected Mode Enabled")
If v_Response = vbYes Then
obj_Shell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\2500", 3, "REG_DWORD"
MsgBox ("Protected mode has been disabled! Submission will not proceed.")
End If
Case 3 'Protected Mode is disabled
Debug.Print " Protected mode is disabled"
Case Else
Debug.Print "Unable to determine status of protected mode in IE"
Debug.Print v_Result
End Select
答案 1 :(得分:0)
我认为你不能使用GetProperty来读出浏览器的安全设置。来自doc: