- 締切済み
VB6→VS2005アップグレード後
いつもお世話になっております。 VBを勉強中です。 VB6→2005にアップグレード後、下記のエラーが発生しました。 "オブジェクト参照がオブジェクト インスタンスに設定されていません。" 以前もこちらでアドバイスをいただき、 デザインの中でADDされているかどうかを確認し、解決に結びついたので 今回も同様かと思い、色々と行ったのですが解決しません。 frmapli_S3のデザイナ内に下記が存在しましたが 原因はここでしょうか? CType(Me.Frame1, System.ComponentModel.ISupportInitialize).EndInit() 以下はVB6での正常稼動時のソースです。 Public Sub ShowPermValue() Dim Textbox As Textbox Dim i As Long: Dim j As Long: Dim k As Long For i = 0 To 19 For j = 1 To 8 k = i * 10 + j Set Textbox = frmapli_S3.Controls("text" & k) Textbox.Text = PermValue(k) Next Next End Sub Public Sub SetPermValue() Dim Textbox As Textbox Dim i As Long: Dim j As Long: Dim k As Long For i = 0 To 19 For j = 1 To 8 k = i * 10 + j Set Textbox = frmapli_S3.Controls("text" & k) PermValue(k) = Textbox.Text Next Next 下記はVB2005アップグレード時のソースです。 Public Sub ShowPermValue() Dim Textbox As TextBox Dim i, j, k As Integer For i = 0 To 19 For j = 1 To 8 k = i * 10 + j Textbox = CType(frmapli_S3.Controls("text" & k), TextBox) TextBox.Text = PermValue(k) Next Next End Sub Public Sub SetPermValue() Dim Textbox As TextBox Dim i, j, k As Integer For i = 0 To 19 For j = 1 To 8 k = i * 10 + j Textbox = CType(frmapli_S3.Controls("text" & k), TextBox) PermValue(k) = Textbox.Text ←ここでエラー Next Next End Sub
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- NYOI
- ベストアンサー率58% (56/96)
>frmapli_S3には、frame0の中に更に >frame1-1~frame1-20までのframeがあり、その中に ここまで判明しているなら、 >Textbox = CType(frmapli_S3.Frame0.Controls("text" & k) どうしてこうなるのでしょう。 きちんとTextboxが含まれる直接の親まで掘り下げていってください。 例えば Textbox = CType(frmapli_S3.Frame0.frame1-1.Controls("text" & k) とすれば、コントロールが拾えるはずです。
- K-Sogacchi
- ベストアンサー率53% (50/93)
時間が無いので少しだけ。 >Textbox = CType(frmapli_S3.Controls("text" & k), TextBox) これの中で使っている、frmapli_S3.Controls("text" & k) (オブジェクト名 text???)が存在するか、frmapli_S3 に「直接」属しているか (Panel等の中に入っていないか)、属しているなら k の値を何らかの形で確認 (例えば Debug.Print(xxx) を使用すれば、そこを通るたびに 「イミディエイト」ウインドウに、xxx が表示されます)してください。 k が本来有り得ない値を示しているなら、それを修正する必要があります。 何らかの理由で、frmapli_S3 の直下で text??? が見つかっていないのが 原因と思われますので、その辺を重点的に調べてください。
- NYOI
- ベストアンサー率58% (56/96)
Textbox = CType(frmapli_S3.Controls("text" & k), TextBox) PermValue(k) = Textbox.Text ←ここでエラー 1行目でCType(frmapli_S3.Controls("text" & k), TextBox) に失敗し、Textboxがnullになっているため、2行目でnull参照になってエラーになっています。 frmapli_S3の直下に、指定された名前のコントロールが含まれていません。きちんと含まれているか確認してみてください。 (前回のように、フォームの中の、さらに何かのコントロールの中にテキストボックスがある…みたいなことになっていませんか?) あと2行目はIntegerにString型であるTextbox.Textを放り込んでいるようですが、あまりいいコードではありません。 明示的にキャストするようにしたほうがいいと思われます。
- redfox63
- ベストアンサー率71% (1325/1856)
PermValueの配列は宣言でサイズが指定してありますか 配列の個数などを初期化してから使いましょう フォームのLoadイベントなどで ReDim PermValue(198) とか PermValueの宣言を Dim PermValue(198) などとしましょう
補足
見ていただきありがとうございます。 宣言について書き込んでいませんでした。 すみません。 Public PermValue(198) As Integer と、表記してありました。 よろしくお願いします。
お礼
申し訳ありませんエラー箇所を間違えていました。 正しくは 下記はVB2005アップグレード時のソースです。 Public Sub ShowPermValue() Dim Textbox As TextBox Dim i, j, k As Integer For i = 0 To 19 For j = 1 To 8 k = i * 10 + j Textbox = CType(frmapli_S3.Controls("text" & k), TextBox) TextBox.Text = PermValue(k) ←ここでエラー Next Next End Sub Public Sub SetPermValue() Dim Textbox As TextBox Dim i, j, k As Integer For i = 0 To 19 For j = 1 To 8 k = i * 10 + j Textbox = CType(frmapli_S3.Controls("text" & k), TextBox) PermValue(k) = Textbox.Text Next Next End Sub アドバイスありがとうございます。 frmapli_S3には、frame0の中に更に frame1-1~frame1-20までのframeがあり、その中に 複数のテキストボックスが存在します。 その為下記のように修正しました。 Textbox = CType(frmapli_S3.Controls("text" & k), TextBox) ↓ Textbox = CType(frmapli_S3.Frame0.Controls("text" & k), TextBox) としましたが解決しませんでした。