2013-02-19 2 views
1

У меня возникла проблема с настройкой ширины моего рабочего бара в пользовательской форме в Excel VBA.Вычислить процентное заполнение индикатора выполнения

У меня есть пользовательская форма, и на этой форме есть метка и изображение.

Максимальная ширина изображения 330.

В моем цикле от 1 до intNumberOfGetRows (в данном случае 64) Я хочу, чтобы обновить свойство ширины изображения, чтобы показать прогресс как каждые 1000 звукозаписывающей кусок большой набор записей помещается в массив и записывается в файл csv.

Вот мой код:

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 

когда intRecord является 13, то это должно быть около 20% изображений заполненных, что означает, что ширина изображения должна быть 66, так что я пришел с этим :

330 * (intRecord/intNumberOfGetRows * 100)/100

это выглядит так, как будто я забыл свой основной математике теории, так это то, что наилучшим образом?

спасибо за любые предложения о том, как улучшить этот

Филипп

+2

Еще один совет: вместо того, чтобы использовать только ярлык, вы также используете текстовое поле с ним, чтобы придать ему хороший эффект. См. Этот пример http://stackoverflow.com/questions/10782394/pop-up-the-excel-statusbar/10787496#10787496 –

+0

ах, но мое изображение имеет эффект градиента на нем от светло-голубого до синего и выглядит действительно spiffy :) –

ответ

3

Вам не нужны эти 100s там. Вы просто хотите, чтобы ваш прогресс, чтобы показать, что вы сделали (в вашем примере) 13/64ths от общего числа, а общая сумма составляет 330, поэтому все, что вам нужно вычислить это 330 * (13/64):

330 * (intRecord/intNumberOfGetRows)

+0

спасибо, это намного проще! –

+0

+ 1 Красиво сделано :) –

Смежные вопросы