2012-12-12 151 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

謝謝!我會在聖誕節後嘗試,然後回報。 –