我在VBScript中编写HTA,根据源工作簿中的数据填充具有不同工作表的excel工作簿。我已经编写了一个带有多个div的伴随HTA,它们在按下按钮时将其显示设置为无,以显示各种类型的输入,然后向用户提供一个“Run”按钮以开始工作簿填充。但是,我遇到了一个问题,即我无法同时更改div的可见性并在单击“运行”按钮时运行填充子。
为了说明,我的HTML看起来像这样:
<div id="panel1">
[div content]
<input type="button" id="panel1-next" onClick="ChangeFrame">
</div>
<div id="panel2">
[div content]
<input type="button" id="panel2-next" onClick="ChangeFrame">
</div>
<div id="panel3">
[div content]
<input type="button" id="panel3-run" onClick="ChangeFrame">
</div>
<div id="panel-end">
[div content]
<input type="button" id="panel-end">
</div>
ChangeFrame
子看起来像这样
Sub ChangeFrame()
Select case window.event.srcelement.id
Case "panel1-next"
panel1.style.display = "none"
panel2.style.display = "block"
case "panel2-next"
panel2.style.display = "none"
panel3.style.display = "block"
case "panel3-run"
panel3.style.display = "none"
panel-end.style.display = "block"
Call Main()
case else
MsgBox window.event.srcelement.id & " Something broke"
End Select
End Sub
使用此代码,我希望ChangeFrame
在按下panel3-run
按钮时首先更新panel3
和panel-end
的CSS,以便{{1}在运行时,会向用户显示Main
的内容。但是,我遇到的问题是,panel-end
和panel3
的CSS仅在panel-end
完成整个过程后才会进行直观更新,而不是之前。
当我尝试创建一个进度条,显示已经评估了多少源数据并将其制作成新工作表时,我在代码中的其他地方也遇到了这个问题。在Main
我有以下HTML
panel-end
和以下CSS
<div id="bar-outline">
<div id="progress-bar"></div>
</div>
在#bar-outline {
width: 200px;
height: 20px;
border: 1px solid black;
margin: auto;
margin-top: 50px;
}
#progress-bar {
width:0px;
height: 18px;
border: 1px solid blue;
background-color: blue;
}
更大的div中创建空白进度条。我希望进度条在panel-end
中的每个循环中增加宽度,如下所示:
Main
我们的想法是,在Sub Main()
[code to locate source file]
[code to create and save destination file]
For i = 0 to 9
[code to find string from array(i) and make a new sheet with string name]
[code to populate destination sheet(i+1) with all instances of the data that match the string from array(i)]
progress-bar.style.width = (i/10)*198
Next
End Sub
循环的每次迭代之后,For
div的宽度将增加progress-bar
宽度的10%,减去1px的两个像素边界。但是,我遇到与在bar-outline
和panel3
之间切换时相同的问题:panel-end
div的视觉外观在完成所有progress-bar
之后才会更新,完成后,首先取消了进度条的推理。
我有两个问题需要回答。首先,代码是如何在VBScript中执行的,以便CSS和HTML只在子结束后可视化更新?第二,我可以通过哪些方式解决这个问题?