很抱歉脚本新手,我接手了这个脚本,它在Windows 7&成员代码While NOT(objIE.Document.script.GetState()>0)
中的这一行继续抛出“对象不支持此属性或方法”。 IE 11 - 曾经在Windows XP中工作过。任何帮助下面的完整脚本将不胜感激。有问题的部分剧本以“***”
Sub subGetDatafromuser 'Enter loan and choose app type
sMsg = ""
bContinue = True
x = 2
iid = oExcelSheet.Cells(x,1).Value
Set objIE = CreateObject("InternetExplorer.Application")
'objIE.Activate
'Open IE Environment
With objIE
.height = 400
.width = 800
.menubar = False
.toolbar = False
.statusbar = False
.addressbar = False
.resizable = False
.RegisterAsBrowser = True
.navigate ("about:blank")
'Load IE
While(.busy): Wend
End With
Set objIEDoc = objIE.document
'#region Create Form
With objIEDoc
.Open
.WriteLn "<html>"
.WriteLn "<form name = ""form"">"
.WriteLn "<head>"
.WriteLn "<title>Please enter a loan number:</title>"
.WriteLn " <style>"
.WriteLn " body {font-family:arial; font-size:10pt}"
.WriteLn " table {font-size:9pt; Border- Collapse:Collapse; width:75%}"
.WriteLn " td.ttl {width:5000px; vertical-align:bottom}"
.WriteLn " </style>"
.WriteLn "<BODY bgcolor=""azure"" style=""font:8pt verdana"">"
.WriteLn "<table Border=0 style=""font:8pt verdana"">"
.WriteLn "<cellspacing=""150"">"
.WriteLn "<tr align=""center""><td>Loan Number:</td><td><input type=""input"" id=""LnNum"" name=""LnNum"" style=""font:8pt verdana; width=100"" maxlength=""10""></tr>"
.WriteLn "</tr>"
.WriteLn "<tr>"
.WriteLn "<td> Please select a loan ID </td>"
.WriteLn "<td>"
.WriteLn "<select name = 'sid'>"
Do until iid = ""
iid = oExcelSheet.Cells(x,1).Value
docid = oExcelSheet.Cells(x,2).Value
.WriteLN "<Option value = '"&iid&"'>"&iid&" - " &docid&"</option>"
x = x + 1
'MsgBox(iid)
Loop
.WriteLn "</select>"
.WriteLn "</td>"
.WriteLn "<tr>"
.WriteLn "<td align=""center""><input type=""button"" name = ""formbutton1"" value=""Submit"" id=""Submit"" style=""font:8pt verdana; width=75""></td>"
'.WriteLn "<td align=""center""><input type=""button"" name = ""formbutton2"" value=""Cancel"" id=""Cancel"" style=""font:8pt verdana; width=75""></td>"
.WriteLn "</tr>"
.WriteLn "</table>"
.WriteLn "</body>"
.WriteLn "</html>"
.WriteLn " </body>"
.WriteLn " </form>"
.WriteLn "</html>"
.WriteLn "<script language='vbscript'>"
.WriteLn " Dim UserDone"
.WriteLn " UserDone = 0"
.WriteLn " Dim Cancel"
.WriteLn " Function formbutton1_OnClick()"
.WriteLn " UserDone = 1"
.WriteLn " End Function"
.WriteLn " Function formbutton2_OnClick()"
.WriteLn " UserDone = 2"
.WriteLn " "
.WriteLn " End Function"
.WriteLn " Function GetState()"
.WriteLn " GetState = UserDone"
.WriteLn " End Function"
.WriteLn "</script>"
.Close
End With
objIE.Visible = True
***While NOT(objIE.Document.script.GetState()>0)
Wscript.Sleep 250
Wend***
Do While objIE.Document.script.GetState() > 0
sLnNum = objIE.Document.form.LnNum.Value
sLnNum = Trim(sLnNum)
Do until Len(sLnNum) >= 10
sLnNum = "0"&sLnNum
Loop
sid = objIE.Document.form.sid.Value
If sid = null or sid = " " or sid = "" Then
MsgBox "Please choose a valid document type"
objIE.Document.script.UserDone = 0
While NOT(objIE.Document.script.GetState()>0)
Wscript.Sleep 250
Wend
Else
objIE.Quit
Set objIE = nothing
Set objIEDoc = Nothing
Call subsavefile
End If
Loop
End Sub
答案 0 :(得分:0)
我认识到这段代码!我甚至认识开发人员......坚持HTML并不属于它只是一长串怪癖中的一个,这些怪癖浪费了我生命中的时间,我永远不会回来......
我知道你最终选择HTA来解决这个问题,但由于我必须在另一个脚本中修复它,我将在这里分享答案给后人。
问题是IE11不再支持vbscript作为脚本语言。我尝试使用兼容模式作为IE7,但没有骰子。我最终做的是将脚本函数转换为javascript,将脚本移动到HTML的Header部分,然后在按钮上添加onclick参数以指向javascript。我认为这可能适合你:
Sub subGetDatafromuser 'Enter loan and choose app type
sMsg = ""
bContinue = True
x = 2
iid = oExcelSheet.Cells(x,1).Value
Set objIE = CreateObject("InternetExplorer.Application")
'objIE.Activate
'Open IE Environment
With objIE
.height = 400
.width = 800
.menubar = False
.toolbar = False
.statusbar = False
.addressbar = False
.resizable = False
.RegisterAsBrowser = True
.navigate ("about:blank")
'Load IE
While(.busy): Wend
End With
Set objIEDoc = objIE.document
'#region Create Form
With objIEDoc
.Open
.WriteLn "<html>"
.WriteLn "<form name = ""form"">"
.WriteLn "<head>"
.WriteLn "<script>"
.WriteLn "var UserDone = 0;"
.WriteLn "function b1(){UserDone=1;}"
.WriteLn "function b2(){UserDone=2;}"
.WriteLn "function GetState(){return UserDone;}"
.WriteLn "</script>"
.WriteLn "<title>Please enter a loan number:</title>"
.WriteLn "<style>"
.WriteLn " body {font-family:arial; font-size:10pt}"
.WriteLn " table {font-size:9pt; Border- Collapse:Collapse; width:75%}"
.WriteLn " td.ttl {width:5000px; vertical-align:bottom}"
.WriteLn "</style>"
.WriteLn "</head>"
.WriteLn "<BODY bgcolor=""azure"" style=""font:8pt verdana"">"
.WriteLn "<table Border=0 style=""font:8pt verdana"">"
.WriteLn "<cellspacing=""150"">"
.WriteLn "<tr align=""center""><td>Loan Number:</td><td><input type=""input"" id=""LnNum"" name=""LnNum"" style=""font:8pt verdana; width=100"" maxlength=""10""></tr>"
.WriteLn "</tr>"
.WriteLn "<tr>"
.WriteLn "<td> Please select a loan ID </td>"
.WriteLn "<td>"
.WriteLn "<select name = 'sid'>"
Do until iid = ""
iid = oExcelSheet.Cells(x,1).Value
docid = oExcelSheet.Cells(x,2).Value
.WriteLN "<Option value = '"&iid&"'>"&iid&" - " &docid&"</option>"
x = x + 1
'MsgBox(iid)
Loop
.WriteLn "</select>"
.WriteLn "</td>"
.WriteLn "<tr>"
.WriteLn "<td align=""center""><input type=""button"" name = ""formbutton1"" onClick=""javascript:b1()"" value=""Submit"" id=""Submit"" style=""font:8pt verdana; width=75""></td>"
'.WriteLn "<td align=""center""><input type=""button"" name = ""formbutton2"" onClick=""javascript:b2()"" value=""Cancel"" id=""Cancel"" style=""font:8pt verdana; width=75""></td>"
.WriteLn "</tr>"
.WriteLn "</table>"
.WriteLn "</body>"
.WriteLn "</form>"
.WriteLn "</html>"
.Close
End With
objIE.Visible = True
While NOT(objIE.Document.script.GetState()>0)
Wscript.Sleep 250
Wend
Do While objIE.Document.script.GetState() > 0
sLnNum = objIE.Document.form.LnNum.Value
sLnNum = Trim(sLnNum)
Do until Len(sLnNum) >= 10
sLnNum = "0"&sLnNum
Loop
sid = objIE.Document.form.sid.Value
If sid = null or sid = " " or sid = "" Then
MsgBox "Please choose a valid document type"
objIE.Document.script.UserDone = 0
While NOT(objIE.Document.script.GetState()>0)
Wscript.Sleep 250
Wend
Else
objIE.Quit
Set objIE = nothing
Set objIEDoc = Nothing
Call subsavefile
End If
Loop
End Sub