私は、後続の段階でユーザーに通知する必要がある長いプロセスがあるため、Excel
がクラッシュしたとは考えられません。長いプロセス中にユーザーに通知するにはどうすればよいですか?
ユーザにExcel
の非同期メッセージを表示するには、VBA
を使用しますか?
私は、後続の段階でユーザーに通知する必要がある長いプロセスがあるため、Excel
がクラッシュしたとは考えられません。長いプロセス中にユーザーに通知するにはどうすればよいですか?
ユーザにExcel
の非同期メッセージを表示するには、VBA
を使用しますか?
あなたがこれを行うにはExcelのステータスバーを使用することができます。ここでは
Application.StatusBar = "status message"
がこれを実装する方法の例です:http://www.vbaexpress.com/kb/getarticle.php?kb_id=87以下
サイト(追加された改行までのコードです作る)読みやすいです:
Sub StatusBar()
Dim x As Integer
Dim MyTimer As Double
'Change this loop as needed.
For x = 1 To 250
'Dummy Loop here just to waste time.
'Replace this loop with your actual code.
MyTimer = Timer
Do
Loop While Timer - MyTimer < 0.03
Application.StatusBar = _
"Progress: " & x & " of 250: " & Format(x/250, "Percent")
DoEvents
Next x
Application.StatusBar = False
End Sub
UPDATE: 私はそのUPDATを追加したいですステータスバーを使用すると、パフォーマンスが大幅に低下します(実際はかなりのビット数)ので、適切な間隔で更新する必要があります。ここで私は(私たちはのみ各1000インクリメント確保するために、ここでMODを使用して)何を意味するかの例です:
Sub test()
Dim i As Long
Dim temp As String
For i = 1 To 1000000
temp = "testing 123, testing 123"
If i Mod 1000 = 0 Then
Application.StatusBar = "Processing " & i & "/1,000,000..."
End If
Next
Application.StatusBar = "Ready"
End Sub
はまた、それ以外の場合は、それかのように残ることでしょうあなたが「準備完了」にテキストをリセットすることに注意してくださいループしていた。
実際には多くの人がステータスバーに注意を払います。しかし、それがそこにあることを知って、それが有用な情報を表示することを期待するならば、これは良い方法です。 –
もう一つの方法は、ステータスを表示するウィンドウフォームを作るという手間を経ることです。しかし、誰かが大量のマクロを持つファイルを使用している場合、ステータスバーを認識しているか、何らかの形でそれを認識する必要があります。 – aevanko
ステータスバーが "アプリケーション関連"であるとは思わない人もいるかもしれません。彼らはそこに一般的なものを印刷するExcelに使用されるかもしれない、いいえ? – Jerome
次の資料は、これを行うのいくつかの方法があります:http://oreilly.com/pub/h/2607
私はあなたのための最善の策は、進行状況のフォームを表示することだと思います。これには、プログレスバーとテキスト更新が含まれているため、ユーザーを安心させることができます。
あなたはあなたのソリューションにどれだけ近づきたいのか分かりませんが、RTD functionを利用できます。そうすれば、ステータス・メッセージを直接ワークシートに入れることができます。しかし、それは複雑ではない(.NETやVB6やC++やDelphiで書かれている)COM Automationサーバーの開発を必要とするが、プロダクションでは一度問題(配備、サポート、コードコントロールなど)を引き起こす。
私はかつて何かが「実行中」と呼ばれる余分なタブを作成することでした私のアドインのためのWalkenbach's progress form
クールで安全に見えます。しかし、私は3つの画面だけでなく、ほとんどの時間、私のユーザーを使用しています。現時点で、私がサンプルをダウンロードすると、アクティブなExcelを持つものとは別の画面にポップアップが表示されることがあります。ピースをかなりよく知っているので、それを修正する方法はありますか? – Jerome
@ jeromeG 3つの画面を表示すると、3つの画面にまたがるExcelの1つのインスタンスで3つのファイルが開いているということですか?または、Excelの3つの別々のインスタンスが実行されている? – brettdj
私は3つの物理的な画面と1つのExcelインスタンスが1つの画面で開いていることを意味します。面白いのは、VBEを開くと、ポップアップが常にVBEが表示される画面に表示されるということです。 VBEを別の画面に移動すると、次回にポップアップが表示されます。 Excelが表示されている画面は何も影響しません。 VBEを閉じると、ポップアップはVBEが最後の画面に表示され続けます。問題は、実際のExcelが左側の画面に表示されているときに、ポップアップから離れて2つの画面が表示されないようにすることです – Jerome
で立ち往生してきました。 時間のかかるループのたびに、更新されたテキスト情報を含む次のコードを追加します。
テキストが頻繁に変更されることはありますが、変更されたカラーバーは、スクリプトがまだ実行中であることをユーザーに示します。 AlertColorを最初に値6で定義する必要があります。
Sheets("Running").Select 'Show the running page
Range("B18").Value = "Importing ABC......"
Cells(18, 2).Interior.ColorIndex = AlertColour
AlertColour = AlertColour + 1
If AlertColour > 8 Then AlertColour = 6
Application.ScreenUpdating = True
Application.ScreenUpdating = False
私は進捗情報を表示するためにFormsを使用します。 [この質問への私の答えを見る] [1] [1]:http://stackoverflow.com/questions/8360981/find-worksheet-name-and-row-number-for-an-excel-workbook/8367240#8367240 –
他の人の意見に加えて、私は実行中にカーソルを変更することをお勧めします:Application.Cursor = xlWait – JimmyPena