Код VBS не работает в HTA (объявление WScript)

В настоящее время я работаю над разработкой интерфейса, который дает пользователям возможность выбирать, какой отчет они хотели бы создать, но у меня возникли проблемы с моим объявлением «WScript».

Я тоже приложил ошибку. Поскольку я установил интервал между строками, не обращайте внимания на номер строки - я выделил строку, в которой я ошибаюсь. Очень признателен за любую помощь (сделал все возможное, чтобы правильно отформатировать свой вопрос).

<html>
  <title>Report Generation</title>
  <head>
  <HTA:APPLICATION 
    APPLICATIONNAME="Master Report Generation"
  SCROLL="yes"
  SINGLEINSTANCE="yes"
  WINDOWSTATE="normal">
  </head>

<style>
BODY
{
background-color: buttonface;
Font: arial,sans-serif
margin-top: 10px;
margin-left: 20px;
margin-right: 20px;
margin-bottom: 5px;
}
.button
{
width: 91px;
height: 25px;
font-family: arial,sans-serif;
font-size: 8pt;
}
td
{
font-family: arial,sans-serif;
font-size: 10pt;
}                     
#scroll
{
height:100%;
overflow:auto;
}
SELECT.FixedWidth 
{
width: 17em;  /* maybe use px for pixels or pt for points here */
}
</style>


<script language="vbscript">

Option Explicit    

Dim WinWidth : WinWidth = 350
Dim WinHeight : WinHeight = 250
Window.ResizeTo WinWidth, WinHeight

  Sub CheckBoxChange

    If CheckBox(0).Checked Then
    ExecuteScoreCard()
    Else
    MsgBox "CheckBox is not checked"
    End If

  End Sub

  Sub ExecuteScoreCard() 
    Dim sitecode
    Dim objExcel  
    Dim objApp  
    Dim objWorkbook
    Dim objSheet
    Dim scriptdir
    Dim oFSO
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    <b>scriptdir = oFSO.GetParentFolderName(WScript.ScriptFullName)</b>

    Set objExcel = CreateObject("Excel.Application")
    Set objWorkbook = objExcel.Workbooks.Open(scriptdir & "\SCORECARD.xlsm")
    Set objSheet = objWorkbook.Worksheets("Cover Tab")  

    objSheet.Cells(4, 2) = sitecode

    objExcel.Run "RefreshConns"
    WScript.Sleep 75000 

    objExcel.ActiveWorkbook.SaveAs scriptdir & "\Scorecards\" & "SCORECARD_" & sitecode & "_" & Year(Now()) & Month(Now()) & Day(Now()) & "_" & Hour(Now()) & Minute(Now()) &".xlsm", 52
    objExcel.ActiveWorkbook.Close
    objExcel.Quit   

    MsgBox("Successfully generated scorecard.")
End Sub 

</script>

<body>
Site Code: <input type="inputbox" name="sitecode">
  <br>
  <input type="checkbox" name="CheckBox"> Scorecard
  <br>
  <input type="checkbox" name="CheckBox"> Report2
  <br>
  <input type="checkbox" name="CheckBox"> Report3
  <br>
  <br>
  <input type="submit" name="accept" value="Submit" onclick="CheckBoxChange">
</body>
</html>

введите здесь описание изображения


person midiman    schedule 24.05.2016    source источник
comment
Я должен отметить, что я попытался поместить WScript.ScriptFullName между кавычками (то есть WScript.ScriptFullName), однако на самом деле он не возвращает scriptdir (который, по сути, является каталогом),   -  person midiman    schedule 24.05.2016
comment
В строке с <b>scriptdir = oFSO.GetParentFolderName(WScript.ScriptFullName)</b> <b> не vbscript, а HTML.   -  person Donald Duck    schedule 24.05.2016
comment
WScript объект не поддерживается в HTA.   -  person omegastripes    schedule 24.05.2016


Ответы (2)


Встроенный объект WScript присутствует, когда вы запускаете сценарий с помощью Windows Script Host (cscript.exe или wscript.exe). С другой стороны, файл HTA в основном запускает IE (хотя и в режиме, позволяющем доступ к локальной файловой системе и COM-объекту). Встроенного объекта WScript нет, хотя COM-объекты, которые можно использовать из WSH, можно также использовать из HTA (см. Эту статью, которую я быстро нашел на , например, с помощью объекта WScript.shell).

Вам нужно делать что-то более похожим на Интернет в рамках HTA. Используйте setTimeout или что-то подобное, чтобы отложить на потом. Я быстро поискал, как получить текущий путь из HTA, и нашел страница, хотя, вероятно, есть и другие подходы.

См. Также этот связанный вопрос.

person Community    schedule 24.05.2016
comment
Большие пальцы вверх. Я не знал о проблемах HTA / WScript. - person Tim; 24.05.2016
comment
Спасибо, Питер! Очень признателен. - person midiman; 24.05.2016

Вот пример файла HTA, показывающий обходной путь для методов WScript.ScriptFullName и WScript.Sleep:

<html>  
    <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>WScript workaround</title>  
        <HTA:APPLICATION
            ID="objHTA"  
        >  
    </head>  
    <body>  
        <script Language="VBScript">

            ' output full path to HTA
            document.write GetFullName()

            ' wait 5 seconds and close
            Sleep 5
            self.close

            Function GetFullName()
                GetFullName = Replace(objHTA.commandLine,"""","")
            End Function

            Sub Sleep(lngDelay)
                CreateObject("WScript.Shell").Run "Timeout /T " & lngDelay & " /nobreak", 0, True
            End Sub

        </script>  
    </body>  
</html>
person omegastripes    schedule 24.05.2016
comment
благодарю вас! это тоже было решение. Я смог найти это в ответе Питера. Не знал, что есть проблемы с WScript и HTA. - person midiman; 24.05.2016