我有一个VBA宏,它执行以下操作:
问题是,一旦整个过程完成,我希望用户知道它已经完成,但是这段代码没有将焦点返回到excel(我希望这是问题)
Windows(the_current_window).Activate
Worksheets(currentQuoteSheet).Select
最后创建的电子邮件是留在屏幕上的内容。只有当我点击菜单栏上的excel图标时,msgbox才会出现。因此,用户只是等待完成(事实上,它已经完成了:()
如何确保msgbox在创建最后一封电子邮件后显示,而无需用户点击excel?
答案 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
为我工作。