プロが教える店舗&オフィスのセキュリティ対策術

変数にコントロール型というものがあるのを見かけたことがあります。
しかしいざ使おうとすると、以下のようなエラーが発生します。

コントロール名を入れようとした場合
------> 型が一致しません

アクティブなコントロールを取得しようとした場合
-----> オブジェクト変数、またはWithブロック変数が設定されていません


ネットで使い方を検索しても上手くヒットしないので、大変恐縮なのですが
使い方を教えていただけませんでしょうか?
どのような使い方をすればよいかわかりません。

よろしくお願いいたします。

A 回答 (3件)

dim XXX As CommandButton


Set XXX = CmdButn1

Form1上にCommandButtonであるCmdButn1が貼り付けられているならそれは可能です。

この例だと使い道が見えないと思うので、使い道を。

Form1上にコントロール配列のCommand(0)を貼り付けます。

Private Cmds(3, 5) As CommandButton

Private Sub Form_Load()

On Error Resume Next
Dim N As Long, M As Long, T As Long

For N = 0 To 2

For M = 0 To 4

T = N * 3 + M
Load Command(T)
Set Cmds(N, M) = Command(T)
Cmds(N, M).Left = N * 1500
Cmds(N, M).Top = M * 400
Cmds(N, M).Show

Next M

Next N

End Sub

こうすると、仮想2次元配列のコマンドボタンが出来上がります。
(動作確認してないです(汗))。
    • good
    • 0
この回答へのお礼

お返事、ありがとうございました。
わざわざ、サンプルコードもいただきまして
とても感謝いたします。
助かりました。ありがとうございました。

お礼日時:2002/06/04 14:04

Control型というのは、型が特定できないようなコントロールを関数が受け取りたいとき、たとえば、コントロールは何でもいいがCaptionというプロパティを何かに設定したいようなときに使います。



Sub SetCaption(X As Control)
X.Caption = "なにか"
End Sub

Sub Form_Load()
SetCaption Command1
SetCaption Label1
End Sub

みたいな。

この場合、Control型でなくても、Object型やVariant型でも構いません。

単にControl型の変数を宣言しても、なんのコントロールかわからないし、どこにも配置されていないので、

オブジェクト変数、またはWithブロック変数が設定されていません

というメッセージが出るのです。

ちなみに、関数の引数として渡さない場合は、

Dim X As Control
Set X = Label1

などとすると、XがLabel1と同様にふるまうようになります。
XのCaptionを変更すると、Label1のCaptionが変更されるのです。

関数の引数として使う場合も、関数内で一時的に使う場合も、コントロールの型がわかっている場合は、明示的にそのコントロールの型で宣言してください。
Control型、Object型、Variant型は任意のコントロールやオブジェクトの参照を格納できますが、処理速度は非常に遅くなります。
それは、そのオブジェクト内のメソッドやプロパティにアクセスする場合、実行時に、そのオブジェクトの型を文字列を使って調べなければならないからです。
さらに、そのオブジェクトが指定されたメソッドまたはプロパティを持っているか、これもまた文字列を使って調べなければなりません。

明示的な型宣言をした場合、名前の解決はコンパイル時に行われるので、実行時にそれに時間を取られることはありません。

普通にプログラムをしていて、Control型に出会うことは、滅多にありません。

この回答への補足

ご丁寧なご説明ありがとうございます。
まことに恐縮ですが、質問させてください。

dim XXX As CommandButton

dim YYY As TextBox

等の場合も、Set XXX = CmdButn1

という風になるのでしょうか?

補足日時:2002/06/04 11:58
    • good
    • 0

具体的には何のコントロールですか?



as objectで宣言すればOKなような気がします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A