1

私はExcelvbaにいくつかのマクロを持っており、Excelシートでいくつかの機能を実行しています。これは完了するのに約30秒かかります。そのため、その期間中に進行状況バーが表示されたユーザーフォームを表示したいと思います。

userform.show関数の最初と最後で使用しuserform.hideてみましたが、バックグラウンドでアクションを実行できないことがわかりました。

したがって、フォームが表示されている間にバックグラウンドで処理を実行できるようにするための方向転換があるかどうかを知りたいだけです。

どうもありがとう :)

Private Sub CommandButton1_Click()
    '--------------Initialize the global variables----------------

   UserForm1.Show



    nameOfSheet2 = "Resource Level view"
    nameOfSheet3 = "Billable Hours"
    nameOfSheet4 = "Utilization"
    '-------------------------------------------------------------
    Dim lastRow, projectTime, nonProjectTime, leaveAndOther
    Dim loopCounter, resourceCounter
    lastRow = 0
    projectTime = 0
    nonProjectTime = 0
    leaveAndOther = 0
    resourceCounter = 2
    Set workbook1 = Workbooks.Open(File1.Value)
    Sheet3Creation
    Sheet2Creation
    Sheet4Creation
    UserForm1.Hide

End Sub
4

1 に答える 1

6

プログレスバーの使用法は、現在実行中のコードの進行状況を表示することです。そして、コードの実行中に誰かがシートで何かをしたいかどうかはわかりません...

とにかく、フォームが表示されている間にシートを操作したい場合は、次のコードを追加してみてください。

 UserForm.Show vbvModeless

また、フォームを更新するには、サブルーチン内にModeless追加する必要があります。DoEvents

最後にフォームを閉じたい場合は、次のようにします。

 UserForm.Unload

これが私がすることです:

ボタンをクリックしてマクロを実行します

Private Sub Button1_Click()
   Call userform.show vbMmodeless
End Sub

Private Sub UserForm_activate()
    Call Main '-- your macro name
End Sub 

Sub Main()
'-- your code
DoEvents '-- to update the form *** important

useroform.Unload
End Sub

OPが彼のコードを示した後:

なぜプログレスバーが必要なのですか?

マクロの実行に時間がかかると、人々は緊張します。クラッシュしましたか?どれくらい時間がかかりますか?トイレに駆け込む時間はありますか?リラックス...

于 2013-01-17T10:12:44.593 に答える