对象在objIE.Document.script.GetState()> 0处不支持此属性或方法

时间:2015-03-26 16:56:54

标签: methods properties

很抱歉脚本新手,我接手了这个脚本,它在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    

1 个答案:

答案 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