使用VBA创建电子邮件后,重点关注Excel

时间:2012-07-11 15:39:45

标签: excel email vba

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

  1. 创建报告,将其保存到主目录。关闭报告
  2. 创建各种电子邮件,将报告附加到每个(不发送电子邮件)
  3. Msgbox显示该流程已完成
  4. 问题是,一旦整个过程完成,我希望用户知道它已经完成,但是这段代码没有将焦点返回到excel(我希望这是问题)

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

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

    如何确保msgbox在创建最后一封电子邮件后显示,而无需用户点击excel?

4 个答案:

答案 0 :(得分:8)

尝试

sub doSomething()
   'do something
   AppActivate "Microsoft Excel"
End Sub

答案 1 :(得分: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

答案 2 :(得分:0)

您是否尝试过按名称调用工作簿?类似的东西:

Workbooks("EXCEL WORKBOOK NAME.XLS").Activate

答案 3 :(得分:0)

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

AppActivate Application.Caption

为我工作。