MSGbox in VBS that updates with value of variable

Just wondering how i could have a MSgbox that displays the value of a variable as it constantly changes. Basically a number has one added to it everytime it loops. I want to display that in a MSGbox that doesnt have to open a million windows


A workaround would be to use PopUp

Set objShell = WScript.CreateObject("WScript.Shell")
For i = 1 To 3
    objShell.Popup i, 1, "AutoClose MsgBox Simulation", vbInformation+vbOKOnly
Next

This will "autoclose" the MsgBox lookalike after 1 second


You can't do this with the default VBScript dialog elements, like MsgBox, WScript.Echo or Popup. You need to build a custom dialog using the Internet Explorer COM object:

Set ie = CreateObject("InternetExplorer.Application")
ie.Navigate "about:blank"

While ie.ReadyState <> 4 : WScript.Sleep 100 : Wend

ie.ToolBar   = False
ie.StatusBar = False
ie.Width     = 300
ie.Height    = 200

ie.document.body.innerHTML = "<p id='msg'>0</p>"

Set style = ie.document.CreateStyleSheet
style.AddRule "p", "text-align: center;"

ie.Visible = True

i = 1
Do
  ie.document.getElementById("msg").innerText = i
  i = i + 1
  WScript.Sleep 2000
Loop Until i > 10

or use an HTA instead of plain VBScript:

<head>
<title>Test</title>
<HTA:APPLICATION ID="oHTA"
  APPLICATIONNAME="Test"
  SCROLL="no"
>
</head>

<style type="text/css">
  p {text-align: center;}
</style>

<script language="VBScript">
  window.resizeTo 300, 200

  Set sh = CreateObject("WScript.Shell")

  Sub Window_onLoad
    For i = 1 To 10
      msg.innerText = i
      Sleep 2
    Next
  End Sub

  Sub Sleep(t)
    sh.Run "ping -n " & (t+1) & " 127.0.0.1", 0, True
  End Sub
</script>

<body>
<p id="msg">0</p>
</body>

One more solution, uses HTA window, without temp files:

dim window, i

set window = createwindow()
window.document.write "<html><body bgcolor=buttonface>Current loop is: <span id='output'></span></body></html>"
window.document.title = "Processing..."
window.resizeto 300, 150
window.moveto 200, 200

for i = 0 to 32767
    show i
    ' your code here
next

window.close

function show(value)
    on error resume next
    window.output.innerhtml = value
    if err then wscript.quit
end function

function createwindow()
    ' source http://forum.script-coding.com/viewtopic.php?pid=75356#p75356
    dim signature, shellwnd, proc
    on error resume next
    set createwindow = nothing
    signature = left(createobject("Scriptlet.TypeLib").guid, 38)
    set proc = createobject("WScript.Shell").exec("mshta about:""<script>moveTo(-32000,-32000);</script><hta:application id=app border=dialog minimizebutton=no maximizebutton=no scroll=no showintaskbar=yes contextmenu=no selection=no innerborder=no /><object id='shellwindow' classid='clsid:8856F961-340A-11D0-A96B-00C04FD705A2'><param name=RegisterAsBrowser value=1></object><script>shellwindow.putproperty('" & signature & "',document.parentWindow);</script>""")
    do
        if proc.status > 0 then exit function
        for each shellwnd in createobject("Shell.Application").windows
            set createwindow = shellwnd.getproperty(signature)
            if err.number = 0 then exit function
            err.clear
        next
    loop
end function