2013-01-07 56 views
0

對於單獨的Excel實例,是否有任何方法可以獲取UserForms集合(對象瀏覽器指示它是VBA.Global的成員)?我需要檢查一個表單是否被加載並且適當地退出遠程應用程序(如果不是),以便不離開任何幽靈進程 - 但我無法找到一種方法來簡單檢測。我可以使用一系列複雜的API調用來識別所有UserForm窗口(「ThunderDFrames」),然後標識它們的父進程,然後標識它們的父進程的hWnd,然後檢測它是否與Application對象的hWnd匹配它被稱爲託管的,但它會感覺更簡單一些,只需獲得UserForms colelction以供應用程序測試即可。如何訪問單獨Excel實例的UserForms集合?

+1

您可以使用UserForms集合遍歷應用程序中的所有加載的用戶表單。 – dee

+0

我知道 - 這就是我想要做的!但是,UserForms集合(不出意外)不提供有關進程外用戶表單(即在Excel.Application對象上運行的那些不是執行代碼的那些對象)的信息。我追求的是以下的xlNew的UserForms集合:'Dim xlNew as New Excel.Application' – tobriand

+1

啊哈我現在看到了。 VBA.UserForms集合明顯地綁定到特定的進程。所以如果你有新的Excel.Application創建,那麼當前的VBA.UserForms集合不包含這個新進程的用戶窗體。對於所有正在運行的Excel實例,U需要類似超級全局VBA.UserForms的東西。所以我不知道如何用VBA解決這個問題:-(。當然,使用Win API,你可以找到所有Excel實例的所有用戶窗體。 – dee

回答

0

嗯,爲一個更簡單的答案 - 不。 Why?

因爲@丹尼爾指出,不同過程中的每一個記憶是彼此孤立和獨立的。因此無法在沒有繁重設計的情況下在另一個流程中讀取memeory。

解決方法是將用戶窗體的數據collection保存到工作簿中,然後從中讀取。就像寫入和閱讀封閉的工作簿一樣。這可以作爲你的記憶位置。沒有效率,但可以做到:)沒有太多的汗水。