質問

私は本当にここで何かに苦しんでいます。私は、クラスモジュールを持っている、のは、私は私のプロジェクトを持っているユーザーフォームの多数に関する方法の束を持っているFormManそれを呼びましょう。一つの特定の方法は、異なる多くの場所から呼び出されると、非常に簡単です - それは、単にフォームにコントロールのユーザー定義の数を追加し、これらの新しいコントロールに対応するために、フォームの高さを拡張します。

ユーザがコントロールの数とユーザーフォームを通過する。

oF.AddControlsToForm iNumberOfControls,frmTest

FormManクラスモジュールでます:

Public Sub Addcontrols(iNum as integer, oForm as userform)

//stuff happens here, oForm is used extensively

oForm.Height = i  //object does not support this property or method
frmTest.Height = i //works

oForm.Show //object does not...
frmTest.show  //works

end sub

ローカル]ウィンドウでは、oFormは十分なので、公正、heightプロパティを持っていません。しかしoFormはfrmTestをとして定義されています。私はoForm.BackColor = vbredを言うことができる、と私は例えばctl = oform.TextBox1を設定することができます。

これはどのようなフォームにコントロールの束を追加することができ、一般的な手順であることを意味します。私はロードとoFormに割り当てる前に、フォームを示すを試みました。

なぜ、高さ、ショープロパティとユーザーフォームのではなく、ユーザーフォームとして宣言されたオブジェクトの方法がありますか?私が間違って何をしているのですか?

本当に任意の助けを感謝します。

役に立ちましたか?

解決

ここでの問題は、ユーザーフォームとfrmTestをオブジェクトが同じタイプのものではないということです。実際に、frmTestを他のメンバーの中で、Heightプロパティを追加することによってそれを拡張するユーザーフォームのサブタイプである。

あなたはおそらく、Objectとしてあなたの関数のパラメータを宣言するに頼る必要があります。

Public Sub Addcontrols(iNum as integer, oForm as Object)
残念ながら、あなたは型の安全性を犠牲にすることがありますが、あなたが、望むよう

この作業をする必要があります。ほとんどのオブジェクト指向の概念は、VBAのコンテキストでバラバラにする傾向があります。

他のヒント

まず第一には、VBAについて覚えておくべきことは、それが準OOではなく、完全なオブジェクト指向であるということです。私はこの問題の周りの奇抜な多くの問題に遭遇してきたので、私は今、VBAの一貫性に完全に依存することを避ける傾向がある。

言われていること、これを試してみます:

Dim fname = oForm.Name (or whatever the property is for this subobject)
With VBA.UserForms.Add(fname)
   .Height = x
   .Show
End With

それはそう愉快に奇妙ではないですか?!?!私は準備して待っているコード例を持っていないので、私は成功を保証することはできませんが、これは正しいアプローチのように感じます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top