0

VB スクリプト コードを含む HTA ファイルに進行状況バーを表示しています。これは、複数のクリックで正常に機能しています。問題は、メッセージ ボックスやエラー ウィンドウなどのユーザー インタラクションが発生するまで更新されないことです。異なる関数を呼び出している単一のサブで呼び出すと、進行状況が表示されません。

<Script Language="VBScript">
'------------for Progress bar --------------
 Public w,x,y, MyTitle 
 w=100
 x=0
 y=100
 MyTitle = " _ Progress"
 '----------- w: bar width, x: done items, y: remaining items
Sub test
    Progress(10)
     callsubA()
    Progress(10)
     callsubB()
    Progress(20)
    callsubC()
    Progress(10)
End Sub

 Function Progress(step)
  x=x+step
  d = Round( x / (y/w) +1  ,0)
  document.Title = FormatPercent(x/y, 0) & MyTitle
  document.all.ProgBarText.innerText = x & "/" & y
  document.all.ProgBarDone.innerText = String(d, "_")
   If d<w Then
    document.all.ProgBarToDo.innerText = String(w-d, "_") & "|"
   Else
    document.all.ProgBarToDo.innerText = "|"
   End If
    If x>=y Then
    document.all.ProgBarToDo.innerText = ""
    MsgBox "Migration Completed"    
    x=0
    d = Round( x / (y/w) +1  ,0)
    document.Title = "Completed"
    document.all.ProgBarText.innerText = ""
    document.all.ProgBarDone.innerText = ""
   End If
 End Function 
</script>

そして私のHTMLは次のようになります:

    <span id="ProgBarText"></span><br>
 <span id="ProgBarDone" style="background-color: #3399FF"></span>
 <font color="#FFFFFF">
 <span id="ProgBarToDo"style="background-color: #C0C0C0"></span> 
 </font> 

すべてのサブの後に msgbox を指定すると、正常に動作します....

4

1 に答える 1

2

私は「sleepy」と呼ばれるサブルーチンを使用しています。これは、他のルーチン内で HTML の更新を可能にする方法でスクリプトを一時停止するほぼ瞬時の「遅延」を生成します。

InnerHTML を更新した後 (またはその最後) に、"Progress" 関数内にこの関数の呼び出しを追加します。

Sub sleepy
    Set objShell = CreateObject("WScript.Shell")
    strCmd = "%COMSPEC% /c"
    objShell.Run strCmd,0,1
End Sub 
于 2013-09-17T15:03:22.493 に答える