VBAユーザーフォームオブジェクト
質問
私は本当にここで何かに苦しんでいます。私は、クラスモジュールを持っている、のは、私は私のプロジェクトを持っているユーザーフォームの多数に関する方法の束を持っている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
それはそう愉快に奇妙ではないですか?!?!私は準備して待っているコード例を持っていないので、私は成功を保証することはできませんが、これは正しいアプローチのように感じます。