I tried to adapt existing code and am not sure where everything should go.
I created a userform, but instead of doing a label for a progress bar I set it up as a list box that is supposed to update as other modules complete.
I have the following code in one module:
Sub DoStuff()
Dim ufUpdate As UUpdate
Dim dtTime As Date
'instantiate the userform
Set ufUpdate = New UUpdate
'display a step
ufUpdate.ListBox1.AddItem "Updating Data1…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data2…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data3…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating Data…"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating …"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating …"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating …"
dtTime = Now
Do: DoEvents: Loop Until Now > dtTime + TimeValue("00:00:02")
ufUpdate.ListBox1.AddItem "Updating is COMPLETE!"
Unload ufUpdate
Set ufUpdate = Nothing
End Sub
I have another module to run each module that correlates to each listbox entry in the code above. I can get the userform to open and run through the code above, but I cannot get it to run concurrently with all of the other updating, which defeats the purpose of this entirely.
My primary concern is this: where do I place the respective coding or how do I alter the above so that it will run concurrently with the data updating modules?
A second question is in regards to updating the listbox entries as they are completed. As it is now the list box simply creates the entry “blah blah updating data…” and I would like to add an update so that the listbox entry adds a “…Done.” at the end of each entry when the correlating data update is finished.
I tried with something like:
ufUpdate.ListBox1.List(0) = "blah blah updating...Done."
at the end of the code modules for each data module rather than sticking it in the code above. Will this work or does it go somewhere else?
There is no need to have a fake update status module. Add the status update to the code that runs the actual update process. If the code that runs the update is not on the form itself, I normally create a couple of public methods on the form for the update process to use.
On the user form do something simple like this:
Then in the code that is actually doing the updates you can do the following: