1

シート「メイン」に、いくつかのテキスト コントロールを含む大きなセルがあります。これらは、シート「Refs」内の名前付きセルにリンクされています。「メイン」には、VBA サブを起動するボタンがあります。

最初に、サブは...

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual

次に、シート「Refs」の名前の後ろのセルを更新します。各更新は、

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

RefsSheet.Cells(row_downldstat, col_downldstat) = state

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

VBA サブルーチンは完了するまでに時間がかかるため、何が起こっているかについてユーザーにフィードバックを提供することを目的としています。残念ながら、テキスト ボックスは VBA サブルーチンが戻るまで更新されません。

式 =Down_State を「メイン」シートのセルに入れると、VBA ルーチンの実行時に更新されます。Down_State は RefsSheet.Cells(row_downldstat, col_downldstat) と同じセルです。いくつかのテキストボックスがあり、全体的なアイデアはそのようなデザインから移行することだったので、私はこの方法を使用しないことを好みます.

テキストボックスは、フォームではなくセルにあることに注意してください。

application.statusbar については知っていますが、あまり目立ちません。

VBA サブルーチンがアクティブなときにこれらのテキスト ボックスを更新するにはどうすればよいですか?

4

2 に答える 2

1

これに変更UpdateStatusします。

Sub UpdateStatus(state As String)
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

    RefsSheet.Cells(row_downldstat, col_downldstat) = state

    Wait 1

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Application.DisplayStatusBar = True
    Application.StatusBar = state
End Sub

そして、上記の下にこの新しいサブを追加します。

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While nSec > Timer
        DoEvents
    Wend
End Sub

今それをテストします;)

于 2012-08-16T15:53:51.950 に答える
0

これがまさにあなたが探しているものかどうかわかりません:

あなたが言った

アイデアは、何が起こっているかについてユーザーにフィードバックを提供することです

セルを更新できない場合は、コードの実行中に表示されるユーザーフォームを作成すると便利です。

これは、使用できるタイプのユーザーフォームへのリンクです。これは、進行状況バーを表示するだけです (これは、多くのループを実行しているときに最も簡単に利用できますが、気にしない限り線形コードで使用できます)パーセンテージ精度について)

http://spreadsheetpage.com/index.php/tip/displaying_a_progress_indicator/

リンクから:

    PctDone = Counter / (RowMax * ColMax)
    With UserForm1
        .FrameProgress.Caption = Format(PctDone, "0%")
        .LabelProgress.Width = PctDone * (.FrameProgress.Width - 10)
    End With

' DoEvents ステートメントは、DoEvents を更新するフォームを担当します

必要に応じて、ユーザーフォームとコードを編集して、単に更新することができます

   .frameprogress.caption =format(pctdone, "0%")

   .frameprogress.caption = "String of desired text"

これは、サブスクライブが実行されていることをユーザーにフィードバックする方法ですが、ニーズには最適ではない場合があります

于 2012-08-16T15:32:50.570 に答える