2012-12-12 99 views
1

我们有一个使用OLE将数据写入Excel的第三方程序。不幸的是,该应用程序的程序员不理解,使Excel的隐形和隐藏更新速度超过极快。 目前,大型工作需要15分钟才能完成,这非常烦人。 因此我想编写一个Addin,当程序写入excel时关闭visibillity等。有没有办法做到这一点?它是唯一使用这种技术的应用程序,因此检测COM/OLE交互就足够了。Excel:检测OLE自动化?

+0

你如何通过Ribbon或VBA调用Addin? Application.Screenupdating = true会关闭此功能,但可能需要将其添加到xll/Addin – InContext

+0

您好, 外部程序是一个独立应用程序,它使用OLE与Excel进行通信。这个程序没有Addin。 我无法影响独立程序的程序员,所以我希望能够检测到OLE通信。该程序基本上是这样的: 1.打开excel并创建一个文件 2.写入数据到excel 3.保存并退出excel。 –

+0

逻辑将在Workbook_Open中添加将屏幕更新设置为false的功能,然后在Workbook_Close中将其设置为true。如果你无法控制文件的创建,这是不可能的,所以你要么与工具的程序员交谈,并说服他们或不可能。即使您知道如何检测OLE过程,也不会在应用程序创建新的Excel副本时添加代码。 – InContext

回答

1

宁可让Excel检查,看它是否是在OLE自动化的手,就可以查看该进程的名称是捉迷藏的OLE

Function isRunning(ProcessName) As Boolean 

Dim objWMIcimv2 As Object 
Dim objList As Object 

Set objWMIcimv2 = GetObject("winmgmts:" _ 
& "{impersonationLevel=impersonate}!\\.\root\cimv2") 'Connect to CIMV2 Namespace 

Set objList = objWMIcimv2.ExecQuery _ 
("select * from win32_process where name='" & ProcessName & "'") 

If objList.Count > 0 Then 

    isRunning = True 

End If 
End Function 
窗口

从那里你可以很容易地抑制屏幕更新。我猜测第三方应用程序通常不会在用户桌面上闲置。如果确实如此,那么显然这种方法不会帮助你。

代码灵感来源于link终止程序

+0

命令行应用程序可以使用吗? 传统应用程序如下所示: 图形用户界面(GUI)使用参数调用无窗口cmd应用程序。 您的解决方案很有趣,谢谢! –

+0

yes ...命令行.exe文件在执行时应显示在进程列表中。我刚刚用ruby ole进行了测试,上面的代码能够检测到它。 – Pynner

+0

谢谢!我会在圣诞节后尝试,然后回报。 –