1

Excel VBA プロジェクトにオブジェクトの配列があります。同じクラスの別のインスタンスを作成し、そのプロパティの 1 を設定しました。次に、オブジェクトの配列を検索して、同じプロパティの現在のオブジェクトと一致する配列内のオブジェクトを見つけようとしています。自己参照 Me を使用して、現在のオブジェクトのメソッドの 1 つ内の配列内のオブジェクトに現在のオブジェクトを設定したいと思います。

私は試した:

Set Me = objectArray(index)

これは動作しません。これは Me キーワードの不適切な使用であると書かれています。現在のオブジェクトを同じタイプの別のオブジェクトに設定する方法はありますか? ありがとう!

編集:

子オブジェクトを持つオブジェクトがあります:

Me.friShift.shiftType.loadFromArray

ここで、shiftType は、自分で定義したクラスである CVocabulary 型のオブジェクトです。次のような loadFromArray というサブがあります。

Public Sub loadFromArray()

    Dim index As Integer

    index = searchVocabArray(Me.typed)

    If (index = -1) Then
        Exit Sub
    End If

    Set Me = vocabArray(index)

End Sub

vocabArray() は、CVocabulary オブジェクトを含むグローバル配列です。

オブジェクトをそれ自体から設定できない場合は、別の方法を試すことができます。これは、これを行う最も簡単で直接的な方法です。現在のオブジェクトの各パラメーターを配列内のオブジェクトのパラメーターの値に設定できると確信していますが、上記のようなことが可能であれば、それが私の好みの方法でした。

4

3 に答える 3

2

パラメータとして関数にそれ自体を与えることでそれを行うことができます。クラスがより明確であるため、VBScript で表示しますが、概念は VBA と同じです。

public myObject
set myObject = new x
myObject.ChangeMe MyObject
msgbox typename(myObject)    ' <-  outputs 'y'


class x
    public sub changeMe(byref object)
        set object = new y
    end sub
end class

class y
   ' just an empty class
end class   

しかし、これは適切なプログラミング パターンではなく、コードが乱雑になり (メンテナンスとデバッグが問題になります)、さらにはメモリ リークが発生する可能性があります。要求したときにオブジェクトを返す(Abstract) FactoryBuilderまたはを作成する必要があります。Provider

  • Factory : 新しい定義済みオブジェクトを作成します
  • Builder : Builder で構成された新しいオブジェクトを作成します
  • Provider : 以前に事前定義された既存のオブジェクトを返します
于 2013-10-18T11:25:55.707 に答える
1

あなたがすでに見たように、私は変えることができない。basExternal のようなパブリック モジュールの関数を使用して、記憶されたオブジェクトを処理できます。

Public Function loadFromArrayByIndex(ByVal lIndex)
  dim xobj as Object

  Set xobj = vocabArray(lIndex)

  '
  ' do modifications and handling on this object:
  ' ...
  '

End Function

.

于 2013-10-18T10:22:19.323 に答える
1

このコンテキストで Me を使用できるとは思いません。VB6 で使用されていた Me を使用しようとしています (C# では「this」と同等でした)。これは VBA では適切ではありません。

いくつかのコード スニペットがないと、何をしているかを確認するのが難しくなります。モジュールで検索を実行し、そこでこのクラスのインスタンスを作成できますか? その後、次のことができます。

Set class2 = objectArrayofClass1(index)
于 2013-10-18T04:14:52.457 に答える