2016-07-04 5 views
0

私はVBAでWordでクイズジェネレータアプリケーションを作成しています。ユーザーは一度に1つの質問を生成するので、すべての質問をパブリックコレクションに保存しようとしています。次のようにコレクションに質問オブジェクトを追加するためのサブです:パブリックVBAコレクションにカスタムクラスを格納する

Option Explicit 

Public questionCollection As VBA.Collection 

'Initialize question collection 
Sub addToQuestionCollection(cQuestion As Object) 

    Dim key As Long 
    'Set question collection if it has not yet been initialized 
    If questionCollection Is Nothing Then 
     Set questionCollection = New VBA.Collection 
    End If 

    'Generate key for question 
    key = Bas04CRC32Hash.CRC32(cQuestion.question) 

    'Assign key to question 
    cQuestion.Id = key 

    'Adds question object to question collection 
    questionCollection.add cQuestion, CStr(key) 

End Sub 

サブルーチンは完全に正常実行されますが、できるだけ早く、それはコレクション上だとして価値を失い、空になります。スコープの宣言が問題にならないように、私のプロジェクトではその質問が曖昧になることはありません(今は20回チェックしたに違いありません)。文書を開いたままでコレクションにすべての質問オブジェクトが保持されるようにするにはどうすればよいですか?

マイクイズジェネレータが質問を表現するためにOLEObjectsを使用しています。

は、いくつかのより多くの私は答えを見つけ掘りしたら

+0

コードがユーザーフォームではなくモジュール内にあることを確認してください。 –

+0

コードは実際にはパブリックモジュール – mattdeak

答えて

1

ありがとうございます。どうやら、OLEObjectを動的に作成すると、グローバル変数がリセットされてしまいます。誰かがこれを回避する方法を知っていれば、私はそれを非常に感謝します。

+0

フォームコントロールを代わりに使用できますか?あなたはすでにそれを考えていたと思います。 –

+0

残念ながら、私のニーズにはまったく合っていません...私は非常に丸見えなことをやっており、それに対処するのはあまりお勧めできません: 私はすべての質問データを動的に保存するパスワード保護モジュールを作成していますクイズが評価されると、すぐにすべてのクラスが構築されます。それは間違いなく欠点を持っていますが、最も実現可能性のようです。 – mattdeak

+0

ちょっと考えてみましょう:文書の表面に実際にオブジェクトを追加していると仮定すると、AIUIでは問題が発生します。これを行うと、Document Objectのコードが再コンパイルされるからです。したがって、*コード*がテンプレートにあり、*これらのコントロールを追加するドキュメントではない場合、それは機能しますか?格納しているデータを他の方法で表現することはできますか(たとえば、コンテンツコントロールを使用する場合、データを表示する場合、またはカスタムXMLパーツ - 基本的にWIndowsのみ - またはワード変数の両方)。 –

関連する問題