投稿者 るきお  (社会人) 投稿日時 2013/4/10 21:06:41
掲示板で表現するのがなかなか難しいですが、書いてみます。

投稿されたプログラムにはいろいろとおかしな点、望ましくない点があります。
中本さんの直面しているエラーを出さなくする方法は私は3つ思いつきました。
しかし、そのどれもおすすめではありません。全体的に問題があるように感じます。
かといって全体を書きなおそうにもやりたいことがわからないのでできません。

そこで、違和感はありますがひとまず3つの解決方法を紹介します。

■解決方法1.JUD変数をクラスにしてください。
このためにはプログラムのいくつかの部分を変更する必要があります。具体例は割愛します。

■解決方法2.testsubの引数に型を指定してください。
Sub testsub(byref JUd As JUD変数(), byref Ary As Object())


■解決方法3.testsub内でJUd(i)のフィールド(NとHiのこと)を変更するのではなく、JUd(i)自体を変更してください。
Sub testsub(byref JUd, byref Ary)
     Dim i As Integer
     For i = 1 To 10 Step 2
         Dim temp As JUD変数
         temp.N = Ary(i)
         temp.Hi = Ary(i + 1)
         JUd(i) = temp
     Next i

End Sub


さて、中本さんが今回どのような立場でプログラムを作成されているのかわかりませんが、
私の会社の後輩で入社1年目の新人だったら私はこう言います。
・配列を使うわないで、List(Of T)を使ってください。
・構造体を使わないで、クラスを使ってください。
・構造体をクラスに入れ子にする必要があるかよく検討してください。
・ByRefは使わないでください。
・下記のループでJUd側は奇数のものだけ値がセットされますが、仕様上正しいか確認してください。
for i= 1 to 10 step 2
    JUd(i).N = Ary(i)      '名前 
    JUd(i).Hi = Ary(i+1)     '番号 
next i

・HiがDouble型なので、誤差が生じる可能性があります。仕様上正しいか確認してください。
また、投稿いただいたプログラムではAryの出所がよくわかりませんが、ここも何か指摘すると思います。

もっと細かいことをいう場合もありますが、とりあえずこのようなところです。
(※念のため補足すると、配列や構造体を使う場合もありえます。)

このような点を踏まえるとそもそもこのエラーは発生しないものなのです。


なお、中本さんのプログラムを貼り付けるといくつかエラーになります。
また、Call testsub(JUd,Ary)  の Ary が何かもよくわかりません。

今回のようなケースでは実行するとエラーになるという話ですので、
そのまま実行できるプログラムを貼り付けてもらえるのが一番よいです。
中本さんが疑問に思っていることを考えるより前に、このプログラムのエラーを修正し、Aryが何か推理して適切なものに置き換えるという作業が必要になってしまいます。