0

さまざまなドキュメントを処理して一貫した外観にする 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 は正しい応答を返しますが、クラスファイルを自動検出できると便利です...

4

1 に答える 1

0

コメントありがとうございます、私は今あなたと一緒にいると思います。したがって、次のようなものが必要です。

Public Sub FormatActiveDocument()
    Dim className as String
    className = "cls" & [ActiveDocumentDocType or whatever] 
    Dim docClass as Object
    Set docClass = GetClass(className)
    If (obj is Nothing) Then MsgBox("ERROR: Missing VBA class '" & className & "'.")

    docClass.FormatDocument   '<-- MAGIC HAPPENS HERE (via late binding)
End Sub

Private Function GetClass(className as String) as Object    
    Dim classes() as VBComponent
    Set classes = ' [YOUR CODE]     
    For each obj as VBComponent In classes
        If (obj.Name = className) Then
            GetClass = obj
            Exit Function
        End If
    Next
    GetClass = Nothing
End Function
于 2013-03-22T01:33:37.950 に答える