
No.3ベストアンサー
- 回答日時:
#1 です。
#2 の方が書かれている通りなのですが、御質問の例に沿って「オブジェクトを指していない時の具体例」を補足します。変数 cTextBox に Nothing が入っている状態というのは、以下のパターンのいずれかになると考えられます。
1.変数 cTextBox が宣言だけされていて、実体が作成されていない状態。
Dim cTextBox As TextBox
となっているだけの時。
この後、「If cTextBox IsNot Nothing Then」の行に到達する前に、
cTextBox = New TextBox()
等とコーディングされておれば、オブジェクト実体を作って変数 cTextBox に参照させている事になりますので、メッセージボックスが正しく表示されます。
2.cTextBox を使い終わって Nothing を入れた後。
cTextBox = Nothing
と書いた後です。このように記載すると、cTextBox はオブジェクトの実体との参照を切断します。
以下蛇足ですが、#2の方が書かれているように事前に Dispose を呼び出すのがセオリーです。
cTextBox.Dispose()
cTextBox = Nothing
但しフォームの子供として正しくこの TextBox を追加している場合には、Dispose する必要はありません(フォームが閉じられた時に自動で呼ばれます)。
No.2
- 回答日時:
参照変数の仕組みは、どの入門本でも最初の方に書いてある
基礎知識だと思いますが。
http://msdn.microsoft.com/ja-jp/library/dd314344 …
> 参照型のデータでは値型とは異なり、その変数を宣言した
> からといって、そのデータ型にみあう領域が確保される訳
> ではありません。
参照変数はメモリ上のインスタンスのアドレスを格納
します。参照するまではアドレスを格納できる入れ物を
用意したに過ぎません。
つまり中身は空です。それを Nothing で表します。
通常は画面のテキストボックスなどは、デザイン時に
貼り付けたらそのままですので、意識する必要は無い
でしょう。(VBが裏で自動でプログラムを書いています)
しかし、自分で動的にコントロールを増減させたり
する時は、処理対象のオブジェクトがまだメモリ上に
存在しない場合も出てくるでしょう。その場合は、
まだどこも参照していないので Nothing になります。
まぁ、もっと使うのがフォームでしょうね。複数画面を
扱うアプリでは、各画面を新しくロードしたり、破棄
したりを頻繁に行いますので。
ただし、アドレス参照はしているが、アドレスの先の
インスタンスは破棄した状態もありえます。
その場合は Control.IsDisposed プロパティもあわせて
チェックします。
http://msdn.microsoft.com/ja-jp/library/system.w …
No.1
- 回答日時:
cTextBox がちゃんと実際のオブジェクト(変数名から推定して TextBox 型のオブジェクト)を指しているかどうかを確認しています。
実際のオブジェクトを指していない場合には、オブジェクトのプロパティにアクセスしようとしてエラーになってしまうので(cTextBox.Name の部分でエラーが発生してしまうので)。
実際のオブジェクトを指している事が明らかな場合には、不要な条件式ですね。
ご回答ありがとうございます。
よくわからないのですが実際のオブジェクトを指していないとは
具体的にどのような時のことをさすのでしょうか
textboxがenableにプログラムによって変更されたとか
なのでしょうか
よくわかりませんもしよろしかったらオブジェクトを指していないときの
具体例を教えていただけませんでしょうか
お忙しい中ご回答いただきありがとうござました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
VBAで Set wb = Sheets(1).Cop...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
エクセルのVBAの標準モジュール...
-
AccessVBAで「dim dbs as datab...
-
ASP レコードセットしたオブジ...
-
vb6.0でEXCELオブジェクトの使用
-
パワーポイント filedialogでフ...
-
エクセルから表をパワーポイン...
-
アクセスにてオブジェクト名変...
-
エクセルVBAで配列内に空白デー...
-
getterとsetterについて
-
CreateObjectとGetObjectの違い
-
(初心者です)VBAについて。「実...
-
AccessVBAからWordのマクロを実...
-
ListView内の検索 VB6
-
オブジェクト変数またはWITHブ...
-
sheetsメソッドの失敗
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
エクセルのVBAの標準モジュール...
-
Excelでフィルタをかけると警告...
-
VBAで既に開いている別アプリケ...
-
テキストボックス中の文字列の...
-
EXCEL VBA オートシェイプナン...
-
VBAで Set wb = Sheets(1).Cop...
-
ExcelVBAでのNZ関数について
-
[VBA]CDOメッセージ送信エラー
-
VBAからPDFファイルにパスワー...
-
エクセルVBAでcode128のバー...
-
VBScriptからDLL参照設定したい
-
VBAについてです。 初心者です...
-
エクセルマクロエラー「'Cells'...
-
オブジェクトが見つかりません
-
エクセルVBAで配列内に空白デー...
-
Excel VBAでWordの複数ファイル...
-
VBScriptでファイルの日時順(降...
おすすめ情報