2013-02-19 3 views
1

Excel VBA의 사용자 폼에서 진행률 표시 줄 이미지의 너비가 올바르지 않게 설정하는 데 문제가 있습니다.진행률 표시 줄의 채우기 비율을 계산하십시오.

나는 userform을 가지고 있으며 그 형태는 라벨과 이미지입니다.

이미지의 최대 폭은 intNumberOfGetRows 1 내지 제 루프 330

는 I는 각각 1,000 레코드 청크 진행을 표시하는 화상의 폭 특성을 업데이트 할 (이 경우 64) 인 대형 레코드 세트는 배열에 저장되고 csv 파일에 기록됩니다. intRecord 13 때

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 

는 그 이미지의 폭이 66이어야 수단 가득 화상의 약 20 %이어야한다, 그래서이 해낸 : 여기

내 코드 :

330 * (intRecord/intNumberOfGetRows * 100)/(100)

그것은 내가 나의 기본적인 수학 이론을 잊어 버린 것처럼 그렇게 보이는 가장 좋은 방법이다? 이

필립

+2

다른 팁 : 레이블 만 사용하는 대신 텍스트 상자를 사용하여 멋진 효과를 낼 수도 있습니다. 이 예제를 참조하십시오 http://stackoverflow.com/questions/10782394/pop-up-the-excel-statusbar/10787496#10787496 –

+0

아,하지만 내 이미지는 밝은 파란색에서 진한 파란색으로 그 위에 그라디언트 효과가 있으며 실제로 보입니다. spiffy :) –

답변

3

당신은 거기에 그 100 단위가 필요하지 않습니다 개선하는 방법에 대한 제안

감사합니다. 당신은 그래서 당신이 계산하는 데 필요한 모든 330 * (64분의 13)이며, 진행은 당신이 (당신의 예에서) 전체의 13/64ths를 완료했으며, 총 330입니다 보여주고 싶은 :

330 * (intRecord/intNumberOfGetRows)

+0

덕분에 훨씬 간단 해졌습니다! –

+0

+1 멋지게 완료 :) –

관련 문제