Reputation: 5981
I am having trouble setting the worrect width of my progress bar image on a userform in Excel VBA.
I have a userform, and on that form is a label, and an image.
The maximum width of the image is 330.
In my loop from 1 to intNumberOfGetRows (in this case 64) I want to update the width property of the image to show progress as each 1000 record chunk of a large recordset is put in an array and written to a csv file.
Here is my code:
For intRecord = 1 To intNumberOfGetRows + 1 ' outer loop
' put the data in an array and print to file
arrContacts = adoRsMailshotAccConData.GetRows(intRows)
With fsOutputFile
For iDx = 0 To UBound(arrContacts, 2)
.WriteLine arrContacts(0, iDx)
Next
'.Close
End With
sMsg = "Number " & intRecord & " of " & intNumberOfGetRows
Application.StatusBar = sMsg
With frmProgress
.lblProgress.Caption = sMsg
.imgProgress.Width = (intRecord / intNumberOfGetRows) * 330
DoEvents
.Repaint
End With
DoEvents
Next
when intRecord is 13, then that should be around 20% of the image filled, which means the width of the image should be 66, so I came up with this:
330 * (intRecord / intNumberOfGetRows * 100) / 100
It looks as though I have forgotten my basic maths theory, so is that the best way?
thanks for any suggestions on how to improve this
Philip
Upvotes: 1
Views: 2375
Reputation: 13244
You don't need those 100s in there. You just want your progress to show you have done (in your example) 13/64ths of the total, and the total is 330, so all you need to calculate is 330 * (13/64):
330 * (intRecord / intNumberOfGetRows)
Upvotes: 3