VBS 代码在 HTA 中不起作用(WScript 声明)

VBS code not working in HTA (WScript declaration)

我目前正在开发一个界面,让用户可以选择 select 他们想要生成的报告,但我的 "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>

当您使用 Windows 脚本宿主(cscript.exe 或 wscript.exe)运行 脚本时,内置 WScript 对象就在那里。另一方面,HTA 文件基本上是 运行ning IE(虽然在允许本地文件系统和 COM 对象访问的模式下)。没有内置的 WScript 对象,尽管可以从 WSH 使用的 COM 对象也可以从 HTA 中使用(例如,请参阅我在 using the WScript.shell object 上快速找到的这篇文章)。

您需要在 HTA 中以更类似于 Web 的方式做事。使用 setTimeout 或类似于延迟功能的东西,直到稍后。我快速搜索了如何从 HTA 中获取当前路径并找到了 a page,尽管可能还有其他方法。

另见 this related question

这是一个示例 HTA 文件,显示了 WScript.ScriptFullNameWScript.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>