
変数にコントロール型というものがあるのを見かけたことがあります。
しかしいざ使おうとすると、以下のようなエラーが発生します。
コントロール名を入れようとした場合
------> 型が一致しません
アクティブなコントロールを取得しようとした場合
-----> オブジェクト変数、またはWithブロック変数が設定されていません
ネットで使い方を検索しても上手くヒットしないので、大変恐縮なのですが
使い方を教えていただけませんでしょうか?
どのような使い方をすればよいかわかりません。
よろしくお願いいたします。
No.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次元配列のコマンドボタンが出来上がります。
(動作確認してないです(汗))。
お返事、ありがとうございました。
わざわざ、サンプルコードもいただきまして
とても感謝いたします。
助かりました。ありがとうございました。
No.2
- 回答日時:
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
という風になるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
TextBoxコントロールを引数として渡すには?
その他(教育・科学・学問)
-
ExcelVBAのコントロールの種類の取得方法
Visual Basic(VBA)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
5
どこにもフォーカスを当てたくない
Access(アクセス)
-
6
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
7
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
8
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
9
VBA基本構文の作り方 2列のリストボックスの昇順並び替え&列削除
Visual Basic(VBA)
-
10
VBA。複数のChangeイベントをまとめる方法
Visual Basic(VBA)
-
11
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
12
ユーザーフォームで動的(Me.Controls.Add)に作成したコントロールの削除
Visual Basic(VBA)
-
13
EXCEL VBAのユーザーフォームに引数を渡す方法について
Excel(エクセル)
-
14
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
15
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
16
VBA CommandButtonの文字ずれ
Visual Basic(VBA)
-
17
Accessで文字列の長さによって、フィールドの幅を自動で合わせる方法
Excel(エクセル)
-
18
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
19
Access・VBAで、Controlsを使用した条件式(書き方)
Access(アクセス)
-
20
コマンドボタンやイメージにマウスをのせるとボタン名を表示したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELでactivexコントロールを...
-
ExcelVBAのコントロールの種類...
-
'ckbl' コントロールは作成され...
-
エクセルVBAでオプションボタン...
-
ActiveX DLL と ActiveXコント...
-
アクセス特有の書き方?
-
エクセル・VBA CheckBoxのオブ...
-
ExcelVBAでListViewが使用できない
-
listviewの設定について
-
Webカスコンってなんですか?
-
コントロール配列と同じような...
-
ビープ音鳴らし続けたい。
-
(VBA)スピンボタンの大量...
-
ASP.netのエラー 2005から2008...
-
C# 子のコントロールからイベン...
-
VB.net webアプリケーションで...
-
VBでアニメーションGIFを表示す...
-
C# タブのコントロール取得
-
エクセルVBAで2種類のCheckbox...
-
VBAのフォームでTextBoxがいっ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELでactivexコントロールを...
-
'ckbl' コントロールは作成され...
-
エクセルVBAでオプションボタン...
-
ExcelVBAでListViewが使用できない
-
カメラスクロールするのを動画...
-
VBA ユーザーフォームの Keypre...
-
Excel VBA で Richtextboxを使...
-
エクセル・VBA CheckBoxのオブ...
-
チェックボックスをオンにした...
-
vb.netで画面のコントロールId...
-
コントロールを移動できない
-
OCXって何ですか?
-
C#で角が丸いテキストボックス
-
ユーザーフォームで動的(Me.Con...
-
C# Form上に配置されたコントロ...
-
ExcelVBAのコントロールの種類...
-
chr関数の呼び出しで「プロ...
-
変数をコントロール型で使用す...
-
ActiveXコントロールはどこへい...
-
Groupboxの配下のコントロール...
おすすめ情報