我有一個Word VBA應用程序處理各種文檔以使它們具有一致的外觀(它們從另一個SW工具導出)。每種文檔類型都有一個「知道」如何進行轉換的類文件。如果添加了新的文檔類型,我會創建一個新的類文件,然後必須更新多個過程以添加對新類的引用。我想自動化發現和使用類文件的過程(它們都遵循命名約定)。下面是我收集的引用文件:在類文件中引用過程
Dim olVBCodeMod As VBComponents
Dim olaClasses() As VBComponent
Dim olVBCodeCmpt As VBComponent
Const slCLASS_NAME_PREFIX = "clsXXXX"
Set olVBCodeMod = Application.VBE.ActiveVBProject.Collection.Item("Normal").VBComponents
ReDim olaClasses(0)
For Each olVBCodeCmpt In olVBCodeMod
If olVBCodeCmpt.Type = vbext_ct_ClassModule Then
If InStr(olVBCodeCmpt.Name, slCLASS_NAME_PREFIX) = 1l Then
Set olaClasses(UBound(olaClasses)) = olVBCodeCmpt
ReDim Preserve olaClasses(UBound(otaClasses) + 1)
End If
End If
Next
ReDim Preserve olaClasses(UBound(otaClasses) - 1)
不幸的是我沒有看到任何方式對類文件的引用要到能夠運行在類文件的程序,即olaClasses( 0).function1?
我的回退的方法,是要創造一個返回對象陣列(傳遞作爲參數)與每個類的引用的子:
Set olaClasses(0) = New clsXXXX
這工作,例如olaClasses(0).function1給了我正確的反應,但它會整潔,能夠自動發現的類文件...
我不清楚你的「自動發現」的情況是什麼樣子。你的「後備」句子在編程上沒有意義。像你一樣,如果你想調用一個類方法,New'關鍵字必須是解決方案的一部分。 – nunzabar 2013-03-21 21:42:18
自動發現將從它運行的項目中收集相應的類文件(基於它們的名稱)。然後對於每個類文件,我將能夠調用對文檔進行操作的過程(其中之一是, 「這是我的文檔」)。這樣,如果我有一個新的文檔格式,我只需要添加一個新的類文件,其他的一切工作,沒有任何其他的變化。對於後備方案,使用New,將引用收集到一個數組中,該數組隨着添加新類而增長。然後我遍歷數組的內容。 – RunDeep 2013-03-21 23:05:35