http://oshiete1.goo.ne.jp/kotaeru.php3?q=307244
に書込もうとしたら締め切られたので,質問という形で投稿します。
Private Sub Command1_Click()
Dim a As Object
Let a = Label1
End Sub
を実行すると
実行時エラー91:オブジェクト変数が設定されていません。
になります。
どういう理由でしょうか?
No.3ベストアンサー
- 回答日時:
>オブジェクト変数へ代入もLetで行なうという仕様でも何も問題がないと思います。
そう開発者も思ったのででしょう、VB7ではSetに統一されました。
以前は、おそらく、オブジェクトとオブジェクトインスタンスとそのプロパティと変数とを、それぞれ分離して考えたかったのでしょう。
>文法の設計上何か理由があるのでしょうか?
中途半端なオブジェクト指向がそうさせたのでしょう。
オブジェクトとそれ以外を分けたいという。
.NETでは、そこら辺はJava的になっています。
>Let Text1 = Label1
>は
>Let text1.text = Label1.caption
>を省略したものと解釈されます(変なの)
textとcaptionは、それぞれデフォルトプロパティです。
要は、そのオブジェクトの中で頻繁に使われるプロパティであり、いつも指定するのは面倒だから省略してもいいじゃん、ってことでしょう。
なので、省略された場合は、デフォルトプロパティを指定したと解釈します。
紛らわしいので(開発者がそう思ったのかどうかは知りませんが)、VB7ではデフォルトプロパティはなくなりました。
参考まで。
回答ありがとうございます。
なるほど、変な文法もVB.NETで改善されたわけですね。
Visual Basic 6.0 ユーザーのための Visual Basic.NET 移行ガイド
4.4すべてがオブジェクト型
4.4デフォルトプロパティ
http://www.microsoft.com/japan/msdn/net/vbtransi …
No.4
- 回答日時:
Setに統一されたのとトレードオフで、規定のプロパティを省略できなくなりました。
Dim a As Object
Let a = Label1
というコードを見せられて、Captionプロパティの値を入れようとしているのか、インスタンスを参照させようとしているのか、判断つきません。
a = Label1.Caption
Set a = Label1
これらはVB6.0以前では明確に別の処理なのです。
No.2
- 回答日時:
Label1は、フォーム上に設置したLabelオブジェクトのインスタンスでしょうか?
Letは、変数やプロパティに値(式の結果)を代入するステートメントです。
また、Letで変数やプロパティに代入できるのは、同じデータ型(またはユーザ定義型)の値だけです。
この場合、aがオブジェクトであるため、代入できません。
オブジェクト変数に、オブジェクトまたはオブジェクトインスタンス(への参照)を代入する場合、Setを使うことになります。
ですので、
Set a = Label1
として、LabelオブジェクトのインスタンスであるLabel1を参照するようにします。
Letを使うのは、例えば、
Dim a As String
Let a = Label1.Caption
という場合です。
詳しく載っているサイトが見つからなかったので、とりあえず1つだけ参考URLを上げておきます。
参考URL:http://homepage1.nifty.com/CavalierLab/lab/vb/cl …
この回答への補足
回答ありがとうございます。
質問307244でLetとSetの話が出ていますが、そこの結論に
納得できなかったので質問を立てました。
そもそもSetは何故必要なのだろう、以前から疑問でした。
オブジェクト変数へ代入もLetで行なうという仕様でも何も問題が
ないと思います。
文法の設計上何か理由があるのでしょうか?
ちなみに
Let オブジェクト(変数) = オブジェクト(変数)
は、標準プロパティから標準プロパティへの代入となります。
Let Text1 = Label1
は
Let text1.text = Label1.caption
を省略したものと解釈されます(変なの)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) VBAでWorkbook.addの使い方 3 2023/02/01 11:58
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
エクセルのVBAの標準モジュール...
-
VBAで作成するメール(開封確認...
-
VBScriptでファイルの日時順(降...
-
オブジェクト変数またはWITHブ...
-
VBS 指定のフォルダ内の最新の...
-
AccessVBAで「dim dbs as datab...
-
テキストボックス中の文字列の...
-
横軸ラベルの追加に関するエラ...
-
オートメーションエラーについて
-
VBAで既に開いている別アプリケ...
-
マクロ初心者です。 インデック...
-
ExcelのVBAについて(グラフ操作)
-
Excelでフィルタをかけると警告...
-
オブジェクトが見つかりません
-
エクセルマクロエラー「'Cells'...
-
エクセルVBAでFor each文
-
アクセスにてオブジェクト名変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
Excelでフィルタをかけると警告...
-
VBAで既に開いている別アプリケ...
-
エクセルマクロエラー「'Cells'...
-
テキストボックス中の文字列の...
-
VBAで Set wb = Sheets(1).Cop...
-
ある文字列が全て数字であるか...
-
VBAからPDFファイルにパスワー...
-
VBScriptでファイルの日時順(降...
-
EXCEL VBA オートシェイプナン...
-
[VBA]CDOメッセージ送信エラー
-
エクセルVBAで2つの画像を比較...
-
PowerPointVBAでスライドマスタ...
-
UserForm1.Showでエラーになり...
-
上下の位置揃えについて
-
VBAについてです。 初心者です...
-
VBAで作成するメール(開封確認...
おすすめ情報