10

次の VBA コードは で停止しMe.Showます。私のテストから、Me.Showコードが UserForm 内にある場合でも、すべてのコード実行が停止するようです。

この部分は UserForm の外側にあります:

Public Sub TestProgress()  
    Dim objProgress As New UserForm1
    objProgress.ShowProgress
    Unload objProgress
End Sub

この部分は UserForm の中にあります:

Private Sub ShowProgress()
    Me.Show vbModal
    Dim intSecond As Integer
    For intSecond = 1 To 5
        Application.Wait Now + TimeValue("0:00:01")
        Me.ProgressBar1.Value = intSecond / 5 * 100
    Next intSecond
    Me.Hide
End Sub

Me.ShowUserForm が表示された後、コードは で停止します。エラーはありません。コードの実行を中止するだけです。VBA でモーダル UserForm 内のコードを実行する唯一の方法は、次のように UserForm_Activate プロシージャにコードを含めることです。

この部分は UserForm の外側にあります:

Public Sub TestProgress()  
    Dim objProgress As New UserForm1
    Load objProgress
    Unload objProgress
End Sub

この部分は UserForm の中にあります:

Private Sub UserForm_Initialize()
    Me.Show vbModal
End Sub

Private Sub UserForm_Activate()
    Dim intSecond As Integer
    For intSecond = 1 To 5
        Application.Wait Now + TimeValue("0:00:01")
        Me.ProgressBar1.Value = intSecond / 5 * 100
    Next intSecond
    Me.Hide
End Sub

もちろん、Me.ShowUserForm_Activate の中に入れることはできません。なぜなら、そのプロシージャは UserForm Show イベントの後にしか起動しないからです。

のドキュメントにUserForm.ShowModalは、「ユーザーフォームがモーダルの場合、ユーザーはアプリケーションの他の部分を使用する前に、情報を提供するかユーザーフォームを閉じる必要があります。ユーザーフォームが非表示になるかアンロードされるまで、後続のコードは実行されません。

プロセスの実行中にユーザーがアプリケーションと対話するのを防ぐために、進行状況バーとしてモーダル UseForm を使用しようとしています。しかし、すべてのコードが UserForm_Activate プロシージャ内にある必要がある場合、これを達成するのは困難です。

ここで何か不足していますか?すべてのコード実行が で停止するのはなぜMe.Showですか?

4

5 に答える 5

11

フォームが で表示されるとvbModal、コードは実行を中断し、ユーザーがフォームを操作するのを待ちます。たとえば、ボタンをクリックするか、ドロップダウンを使用します。

フォームのプロパティを更新する場合

ShowModal = False

コードから削除vbModalします。これにより、フォームが表示されたときにコードの実行を続行できます。

于 2009-11-23T16:45:43.633 に答える
8

次のエラーが発生した理由に対する答えを探していました。

実行時エラー '5': 無効なプロシージャ コールまたは引数

このコード行を実行すると:

UserForm1.Show True

この行は機能しますが:

UserForm1.Show False

もちろん。TrueはvbModalと同じではありません! したがって、簡単な答えは、正しい列挙を使用することです。

UserForm1.Show vbModal
UserForm1.Show vbModeless
于 2014-03-18T09:12:31.427 に答える
4

私はこれを理解したと思います。

Me.ShowUserForm_Activateイベントが発生した後。UserForm_Activateプロシージャにコードがない場合、VBAはを待機しているため、何も起こりませんMe.Hide

したがって、イベントの順序は次のとおりです。Me.Show>>UserForm_ActivateMe.Hide

実行するコードはすべてUserForm_Activateプロシージャに含まれている必要があり、の前に Me.Hideある必要があります。

構造は非常に厳格ですが、私はその構造を有利に使用できるかもしれません。

于 2009-11-23T16:10:58.853 に答える
-4

私はそれを理解したと思います この簡単な手順を実行してみてください フォームでバンク部分を右クリックしてプロパティをクリックします 次のコードを使用してユーザーフォームを表示するときに、「ShowModal」を False または VBA コードに変更します。

UserForm1.Show False

于 2013-11-16T16:38:49.670 に答える
-5

I don't really know whats going into your mind because there are a wide variety of code for what your are asking but i hope that this can help

Private Sub cmdSwitch_Click() UserForm1.Hide UserForm2.Show

End Sub

于 2013-11-16T16:27:35.327 に答える