2

インターネット全体で単純なプログレスバーを検索したと思いますが、関数/サブが終了した後に進行するものを見つけることができません。

以下のコードで、私が望むものを示します。VBA に関する私の知識は、このようなものを作成するための基本的なものです。

ボタン付きのフォームがあります。ボタンをクリックすると、彼はこれを実行する必要があります。

Sub program()

progressbarform.show

Call function1
"set progressbar to 20%"

Call funcion2
"set progressbar to 40%"

Call function3
"set progressbar to 100%"

"Unload progressbar form"

End Sub
4

5 に答える 5

6

委任を使用して、これを機能させることができます。プログレス バーは、機能 1、2、および 3 の実行とは別のフォームになっているため、プログレス バー フォーム内で実行してみてください。form.Show を呼び出した後、フォームにフォーカスがあり、関数 1、2、および 3 はフォームが閉じるまで実行されません。

プログレス バー フォーム (ラベルとプログレス バー コントロールがあると仮定) に、プログレス バーを更新する関数を配置します。

Public Sub UpdateProgress(intProgress As Integer, Optional strMessage As String)

    If Not IsMissing(strMessage) Then
        lbl_Progress.Caption = strMessage
    End If
    pb_Progress.Value = intProgress
    Call Me.Repaint

End Sub

次に、プログレスバー フォーム内から関数を実行できます。これを行うには、それを呼び出したフォームをオブジェクトとして設定して関数を公開するか、関数 1、2、および 3 をプログレス バー フォームに保存します。

Sub RunFunctions()

    UpdateProgress 0, "Starting functions"    

    UpdateProgress 10, "Begin function1"    
    Call function1
    UpdateProgress 30, "Finished function1"  

    UpdateProgress 50, "Begin function2"    
    Call function2
    UpdateProgress 70, "Finished function2"  

    UpdateProgress 90, "Begin function3"    
    Call function3
    UpdateProgress 100, "Finished function3"

    UpdateProgress 100, "Finished All Functions"

End Sub

これを設定するのに助けが必要な場合は、私に質問してください。

于 2013-03-15T14:28:48.883 に答える
2
Sub program()

UserForm1.ProgressBar1.Min = 0
UserForm1.ProgressBar1.Max = 100
UserForm1.ProgressBar1.Value = 0

UserForm1.Show vbModeless

Call function1
UserForm1.ProgressBar1.Value = 20

Call funcion2
UserForm1.ProgressBar1.Value = 40

Call function3
UserForm1.ProgressBar1.Value = 100

End Sub
于 2013-03-15T14:59:49.973 に答える
1

サンプルコードは機能します。

subを実行すると、コードが順番に実行されます。したがって、function1が呼び出されると、以下のコードfunction1は完了する前に実行されず、他のすべての関数にも同じことが当てはまります。

最大の問題は、おそらくフォームにプログレスバーコントロールを設定することです。私は(非常に迅速に)試しましたが、ライブラリが登録されていないため、追加できませんでした。

標準のコントロールを使用して、偽のプログレスバーを作成できます。

于 2013-03-15T14:10:47.763 に答える
0

2 でフォームを作成しLabelsます。最初は進行状況の色で、もう 1 つは xx% です。

スクリプトが進行するすべてのステップで、2 つの幅を変更してLabels、左Labelが広くなり、右Labelの左位置が同じ量のピクセルでシフトし、2 番目のラベルのキャプションを更新します。左が 100% に達したら、右に十分なスペースを確保します。Label

于 2013-03-15T14:19:49.893 に答える