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.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>
我目前正在开发一个界面,让用户可以选择 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.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>