hiroton
2020/09/08 (火) 10:28:50
c3560@f966d
基本的なところなので解説しているサイトをいろいろ探してみると良いです
オブジェクトを入れる変数(Office TANAKAさん)
VBAでは既定のプロパティの省略というコーディングを楽にするための仕組みがあるので、その結果として違いの判らない動作もあります。以下サンプルコードを記述するので違いを比べてみてください
ex)通常の変数宣言(文字列型)
Dim txtTitle as string '//文字列型として変数を定義
txtTitle = Me.txtタイトル
'//単純な変数の代入の場合、「式」は評価され、既定のプロパティが代入される。次の式と等価
txtTitle = Me.txtタイトル.Value
MsgBox txtTitle '//"ドラゴンクエスト"が表示される。次の式と等価
MsgBox "ドラゴンクエスト"
MsgBox Me.Controls(txtTitle) '//"ドラゴンクエスト"という名前のコントロールが参照される(多分存在しないのでエラー)。次の式と等価
MsgBox Me.Controls("ドラゴンクエスト").Value
txtTitle = Me.txtタイトル.Name '//Nameプロパティを明示したので"txtタイトル"が代入される
MsgBox Me.Controls(txtTitle) '//"ドラゴンクエスト"が表示される。次の式と等価
MsgBox Me.Controls("txtタイトル").Value
txtTitle = "ファイナルファンタジー"
MsgBox Me.txtタイトル '//"ドラゴンクエスト"が表示される
txtTitle.SizeToFit '//ただの文字列にメソッドはないのでエラー
ex)オブジェクトとしての変数宣言(Textbox型)
Dim txtTitle as TextBox '//テキストボックス型として変数を定義
Set txtTitle = Me.txtタイトル '//objectへの代入、Setが必要
MsgBox txtTitle '//"ドラゴンクエスト"が表示される
'//txtTitleはテキストボックスなので既定のプロパティ(Value)が参照される。次の式と等価
MsgBox Me.txtタイトル.Value
txtTitle = "ファイナルファンタジー" '//テキストボックスへの代入となり、次の式と等価
Me.txtタイトル.Value = "ファイナルファンタジー"
MsgBox Me.txtタイトル '//"ファイナルファンタジー"が表示される
txtTitle.SizeToFit '//Me.txtタイトル.SizeToFit として動作する
※ACCESSのテキストボックスにはCopyメソッドがないので2番目の例でもtxtTitle.Copyはエラーになる(ACCESSからクリップボードを操作するのはめんどくさいです)
ex)ラベルコントロールを変数にしたい
Dim myLbl As Label
Set myLbl = Me!lblタイトル
myLbl.ForeColor = RGB(255, 0, 0)
通報 ...
就業後にじっくり確認させていただきます。色々読んできたつもりなのですが、なかなか理解しきれず…
教えていただき、本当にうれしいです。読むのが楽しみです。