• 締切済み

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

みんなの回答

  • NYOI
  • ベストアンサー率58% (56/96)
回答No.4

>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) とすれば、コントロールが拾えるはずです。

回答No.3

時間が無いので少しだけ。 >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)
回答No.2

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を放り込んでいるようですが、あまりいいコードではありません。 明示的にキャストするようにしたほうがいいと思われます。

npupu
質問者

お礼

申し訳ありませんエラー箇所を間違えていました。 正しくは 下記は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) としましたが解決しませんでした。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

PermValueの配列は宣言でサイズが指定してありますか 配列の個数などを初期化してから使いましょう フォームのLoadイベントなどで ReDim PermValue(198) とか PermValueの宣言を Dim PermValue(198) などとしましょう

npupu
質問者

補足

見ていただきありがとうございます。 宣言について書き込んでいませんでした。 すみません。 Public PermValue(198) As Integer と、表記してありました。 よろしくお願いします。

関連するQ&A