Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9275 / 13644 ツリー ←次へ | 前へ→

【28251】構造体の動的配列をプロージャに引数とし... Kohaku 05/9/1(木) 13:09 質問[未読]
【28265】Re:構造体の動的配列をプロージャに引数と... ichinose 05/9/1(木) 16:53 発言[未読]
【28266】Re:構造体の動的配列をプロージャに引数と... こたつねこ 05/9/1(木) 17:12 回答[未読]
【28267】Re:構造体の動的配列をプロージャに引数と... こたつねこ 05/9/1(木) 17:27 発言[未読]
【28268】Re:構造体の動的配列をプロージャに引数... Kohaku 05/9/1(木) 17:56 お礼[未読]

【28251】構造体の動的配列をプロージャに引数とし...
質問  Kohaku  - 05/9/1(木) 13:09 -

引用なし
パスワード
   はじめまして。いつも参考にさせていただいてます。
質問ですが、構造体(ユーザ定義型)の動的配列を、他のプロージャに引数として渡したいのですが、うまくいきません。

type sample
aaa as integer
bbb as integer
ccc as string
end type

sub other(data() as sample)
 ....
end sub

sub main()
dim a as sample()
other(a)
....
end sub

宜しくお願いします。

【28265】Re:構造体の動的配列をプロージャに引数...
発言  ichinose  - 05/9/1(木) 16:53 -

引用なし
パスワード
   ▼Kohaku さん:
こんにちは。

>はじめまして。いつも参考にさせていただいてます。
>質問ですが、構造体(ユーザ定義型)の動的配列を、他のプロージャに引数として渡し
たいのですが、うまくいきません。
       ↑このうまくいかない内容を詳細に記述して下さい。
例えば、

以下のコードを実行すると

xxxの行で xxxx「xxxxxxx」というエラーメッセージが

表示され、プログラムが中断します。
私の仕様はxxxxxとなる予定なんですが・・・

というように・・・。


標準モジュールに

'================
Type sample
aaa As Integer
bbb As Integer
ccc As String
End Type
'=====================================================
Sub main()
  Dim a(1 To 3) As sample
  Call other(a())
  For g0 = LBound(a()) To UBound(a())
   With a(g0)
    MsgBox .aaa & vbCrLf & .bbb & vbCrLf & .ccc
    End With
   Next g0
End Sub
'==========================================
Sub other(data() As sample)
 For g0 = LBound(data()) To UBound(data())
   With data(g0)
    .aaa = g0
    .bbb = g0 + 1
    .ccc = g0 + 2
    End With
   Next g0
End Sub

mainを実行してみて下さい。
ユーザー定義型の配列を引数にして実行できています。

という事でしょうか?

だとしたら、宣言の仕方がエラーの原因ですが・・・。

Dim a(1 To 3) As sample


確認して下さい。

【28266】Re:構造体の動的配列をプロージャに引数...
回答  こたつねこ  - 05/9/1(木) 17:12 -

引用なし
パスワード
   ▼Kohaku さん:
こんにちは

>質問ですが、構造体(ユーザ定義型)の動的配列を、
>他のプロージャに引数として渡したいのですが、うまくいきません。
>

動的配列を使用する場合、サイズを決定する前に
要素にアクセスするとエラーになるのでその前に
サイズを指定するようにしましょう。

>sub main()
> dim a as sample()
dim a() as sample

redim data(0 to 3) as sample
> other(a)
call other(a)
>end sub

【28267】Re:構造体の動的配列をプロージャに引数...
発言  こたつねこ  - 05/9/1(木) 17:27 -

引用なし
パスワード
   ▼Kohaku さん:
こんにちは

>redim data(0 to 3) as sample
redim a(0 to 3) as sample

の間違いです。^^;

【28268】Re:構造体の動的配列をプロージャに引数...
お礼  Kohaku  - 05/9/1(木) 17:56 -

引用なし
パスワード
   ichinoseさん、こたつねこさん、返信ありがとうございます。
自己解決になってしまいましたが、main実行時に、ohter()を引っ張る際
call other(a)ではなく、other(a)としていたことが原因でした。

ポカミス申し訳ないです。

>動的配列を使用する場合、サイズを決定する前に
>要素にアクセスするとエラーになるのでその前に
>サイズを指定するようにしましょう。
sub ohter()内部でReDimしているため、大丈夫でした。
Sub other(data() As sample)

  Dim i As Integer
  With Worksheets("Sheet3")
    i = 1
    Do While .Cells(i, 1) <> ""
      ReDim Preserve data(i)
      data(i).aaa = .Cells(i, 1)
      data(i).bbb = .Cells(i, 2)
      data(i).ccc = .Cells(i, 3)
      i = i + 1
    Loop
  End With
End Sub

ありがとうございました。

9275 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free