2016-11-25 89 views
1

我有一个问题我无法找到答案。我有一个宏,从.MHTML文件导入数据到我的工作表(使用.MHTML文件是我的不幸的是唯一的选择。这是来自SAP的出口和在Excel中打开,但没有文件,因为文件的扩展名类型识别为一个Excel )。在宏的末尾,我想要关闭它。它不被识别为excel工作簿,所以我无法使用简单的:Workbooks().close命令。VBA - 关闭非Excel文件

有没有人对如何做到这一点任何想法?提前致谢。

+0

你可以试试这个链接:http://www.taltech.com/support/entry/o pening_and_closing_an_application_from_vba ​​ – Limak

+0

谢谢Limak,我认为正确的修改,它可以工作。从示例中,我将'strTerminateThis =“bc-wedge.exe”'更改为'strTerminateThis =“SAP_export.MHTML”'。我想如果我将它改为'strTerminateThis =“EXCEL.exe * 32”',它可以工作,但它也会终止我的宏,因为它也在EXCEL.exe * 32进程下。你知道如何修改代码来查看开放的应用程序,而不是只是打开的进程?谢谢 – jmeddy

+0

为什么你想终止''EXCEL.exe * 32“'程序?也许你可以给我提供一些Windows任务管理器的截图,让我理解你的担忧。 – Limak

回答

1

我能找到这个代码,并更改标题以匹配是在任务管理器中显示后,它的工作:http://www.vbforums.com/showthread.php?208430-Use-sendmessage-to-close-an-application

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 
Private Const WM_CLOSE = &H10 

Sub ExportClose() 
Dim CloseIt As Long 
CloseIt = FindWindow(vbNullString, "Microsoft Excel - SAP_export.MHTML") 
PostMessage CloseIt, WM_CLOSE, CLng(0), CLng(0) 
End Sub 

注:此我的系统的伟大工程,但不是我的同事 。目前想弄清楚为什么

0

也许尝试只是:

Windows("SAP_export.MHTML").Close 
+0

我无法得到这个工作,利马克,但感谢您的帮助。我能够找到一种使用API​​的方式 – jmeddy