2

我有一个 VBA 宏,它执行以下操作:

  1. 创建报告,将其保存到主目录。关闭报告
  2. 创建各种电子邮件,将报告附加到每个电子邮件(不发送电子邮件)
  3. Msgbox 显示该过程已完成

问题是,一旦整个过程完成,我希望用户知道它已经完成,但是这段代码不会将焦点返回到 excel(我希望这会是问题)

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

最后创建的电子邮件是留在屏幕上的内容。只有当我单击菜单栏上的 excel 图标时才会出现 msgbox。所以用户只是在等待完成(事实上,当它完成时:()

任何想法如何确保在创建最后一封电子邮件后显示 msgbox 而无需用户单击 Excel?

4

4 回答 4

8

尝试

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

我在 MS Office 365 上,由于某种原因,我在尝试时遇到应用程序错误AppActivate "Microsoft Excel"AppActivate "Excel"但是:

AppActivate Application.Caption

为我工作。

于 2019-07-22T17:28:34.777 回答
1

尽管这在一定程度上有效,但它不会激活 MSGbox 以允许人们按键盘上的 y/n(您可以使用鼠标)。

如果您重复执行任务并且不想抓住鼠标,这允许键盘交互。经过测试的 Office 2013(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 回答