@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Excel VBAでコンパイルエラー

1
投稿者投稿内容
cedman
会議室デビュー日: 2004/06/21
投稿数: 13
投稿日時: 2007-07-20 10:56
Excel 2003のVBAです。

以下のようなコードで、標準モジュールの「 ss = c1(i).p_t1(j).s」の行で
コンパイルエラーになります。
コンパイルエラーの前の行のubound関数は望んだ値を返します。
また、ウォッチウインドウでは、c1(i).p_t1(j).sの中身を参照できます。
どこが悪いのでしょうか?

----ここから 標準モジュール
option explicit
Public Type udtType1
s As String
End Type

Sub test()

Dim i As Long
Dim j As Long
Dim c1(10) As Class1
Dim ss As String


For i = 0 To UBound(c1)
Set c1(i) = New Class1
For j = 0 To UBound(c1(i).p_t1)

ss = c1(i).p_t1(j).s

Next j
Next i

End Sub
----ここまで 標準モジュール


----ここから クラスモジュール(Class1)
Option Explicit
Private t1() As udtType1

Public Property Get p_t1() As udtType1()
p_t1 = t1
End Property

Private Sub Class_Initialize()
Dim i As Long
ReDim t1(10)

For i = 0 To UBound(t1)
t1(i).s = "a"
Next i

End Sub
----ここまで クラスモジュール(Class1)
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-07-20 13:01
戻り値が配列だとコンパイル時にバインドができないため、みたいですね。
以下のように修正したら通りました。

標準モジュール
For j = 0 To c1(i).getCount()

クラスモジュール
Public Property Get p_t1(i As Long) As udtType1
p_t1 = t1(i)
End Property

Public Function getCount() As Long
getCount = UBound(t1)
End Function
cedman
会議室デビュー日: 2004/06/21
投稿数: 13
投稿日時: 2007-08-02 20:41
mioさま、返信ありがとうございました。
仰せの方法で回避します。
遅くなりまして申し訳ありません。
1

スキルアップ/キャリアアップ(JOB@IT)