アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://oshiete1.goo.ne.jp/kotaeru.php3?q=307244
に書込もうとしたら締め切られたので,質問という形で投稿します。

Private Sub Command1_Click()

Dim a As Object

Let a = Label1
End Sub

を実行すると
実行時エラー91:オブジェクト変数が設定されていません。
になります。
どういう理由でしょうか?

A 回答 (4件)

>オブジェクト変数へ代入もLetで行なうという仕様でも何も問題がないと思います。



そう開発者も思ったのででしょう、VB7ではSetに統一されました。
以前は、おそらく、オブジェクトとオブジェクトインスタンスとそのプロパティと変数とを、それぞれ分離して考えたかったのでしょう。

>文法の設計上何か理由があるのでしょうか?

中途半端なオブジェクト指向がそうさせたのでしょう。
オブジェクトとそれ以外を分けたいという。
.NETでは、そこら辺はJava的になっています。

>Let Text1 = Label1
>は
>Let text1.text = Label1.caption
>を省略したものと解釈されます(変なの)

textとcaptionは、それぞれデフォルトプロパティです。
要は、そのオブジェクトの中で頻繁に使われるプロパティであり、いつも指定するのは面倒だから省略してもいいじゃん、ってことでしょう。
なので、省略された場合は、デフォルトプロパティを指定したと解釈します。
紛らわしいので(開発者がそう思ったのかどうかは知りませんが)、VB7ではデフォルトプロパティはなくなりました。

参考まで。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なるほど、変な文法もVB.NETで改善されたわけですね。


Visual Basic 6.0 ユーザーのための Visual Basic.NET 移行ガイド
4.4すべてがオブジェクト型
4.4デフォルトプロパティ
http://www.microsoft.com/japan/msdn/net/vbtransi …

お礼日時:2002/07/08 14:17

Setに統一されたのとトレードオフで、規定のプロパティを省略できなくなりました。



Dim a As Object
Let a = Label1

というコードを見せられて、Captionプロパティの値を入れようとしているのか、インスタンスを参照させようとしているのか、判断つきません。

a = Label1.Caption

Set a = Label1

これらはVB6.0以前では明確に別の処理なのです。
    • good
    • 0

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
を省略したものと解釈されます(変なの)

補足日時:2002/07/05 19:43
    • good
    • 0

エラーとなったときにヘルプを参照するとエラーの説明が表示されます。



この場合は、Let ではなくて Set ではないでしょうか?
    • good
    • 0

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