2

私は次のことを行うVBAマクロを持っています:

  1. レポートを作成し、メインディレクトリに保存します。レポートを閉じます
  2. さまざまなメールを作成し、それぞれにレポートを添付します(メールは送信しません)
  3. Msgboxが表示され、プロセスが終了したことが示されます

問題は、プロセス全体が終了したら、それが完了したことをユーザーに知らせたいのですが、このコードはフォーカスをExcelに戻さないということです(これが問題になることを望んでいました)

Windows(the_current_window).Activate
Worksheets(currentQuoteSheet).Select

最後に作成されたメールは、画面に表示されたままになります。メニューバーのExcelアイコンをクリックした場合にのみ、msgboxが表示されません。したがって、ユーザーは終了するのを待っているだけです(実際には、終了するのを待っています:()

ユーザーがExcelをクリックしなくても、最後の電子メールが作成された後にmsgboxが表示されるようにする方法はありますか?

4

4 に答える 4

8

試す

sub doSomething()
   'do something
   AppActivate "Microsoft Excel"
End Sub
于 2012-07-11T15:51:25.263 に答える
6

私はMSOffice365を使用していますが、何らかの理由で試してみるAppActivate "Microsoft Excel"とアプリケーションエラーが発生しますが、次のようになりますAppActivate "Excel"

AppActivate Application.Caption

私のために働いた。

于 2019-07-22T17:28:34.777 に答える
1

これはある程度は機能しますが、MSGboxをアクティブにして、キーボードのy / nを押すことはできません(マウスを使用できます)。

これにより、タスクを繰り返し実行していて、マウスをつかみたくない場合に、キーボード操作が可能になります。テスト済みのOffice2013(64ビット)(32ビットの場合はPtrSafeを削除します)

Private Declare PtrSafe Function MessageBox _
        Lib "User32" Alias "MessageBoxA" _
           (ByVal hWnd As Long, _
            ByVal lpText As String, _
            ByVal lpCaption As String, _
            ByVal wType As Long) _
        As Long
Sub Test
        'Call showwindow(ActiveWorkbook.Name)
        AppActivate "Excel"
        'I need this to retain the focus
        retval = MessageBox(&O0, "Do you want to process", "My Question", vbYesNo + vbSystemModal)
End Sub
于 2014-01-10T04:56:17.177 に答える
0

ブックを名前で呼んでみましたか?何かのようなもの:

Workbooks("EXCEL WORKBOOK NAME.XLS").Activate
于 2012-07-11T15:47:58.993 に答える