お世話になります
構造体内に多次元配列の構造体を持たせたらエラーが出てしまっていて
色々調べてはいるのですが、こういう事例が見つからないため質問します
テストソース
'* テスト構造体1
Type a1
bbb As Integer
ccc() As Byte
ddd() As Long
End Type
'* テスト構造体2
Type a2
AAA(1 To 5, 1 To 5) As a1
End Type
Public qqq(1 To 10) As a2
Private Sub ts()
qqq(1).AAA(1,1).bbb=1
End Sub
という風に、
qqq(1).AAA(1,1).bbb と使いたいのですが、
「メソッドまたはデータメンバが見つかりません」
とエラーが出てしまいます。
ここで、
Type a2
AAA(1 To 5) As a1
End Type
と、配列の次元を変えてみたところ、問題なく使用することができました
ここで、a2 という構造体に多次元配列を持たすことができないのか?
という疑問が発生したのですが、”使える”とも”使えない”とも書いてある記事が見つかりませんでした
私の試したとおり、使えないのがVBの仕様なのか?それとも私の書き方がおかしいのか?
ご教授お願いします。
環境忘れました。
winXP pro
vb6 sp5
です。
> qqq(1).AAA(1,1).bbb=1
(中略)
> qqq(1).AAA(1,1).bbb と使いたいのですが、
> 「メソッドまたはデータメンバが見つかりません」
> とエラーが出てしまいます。
提示されたコードそのままで、エラーもなく「1」が代入されましたけど…?
'--- 標準モジュールのみで、フォームの無いプロジェクトを用意して実験。
Option Explicit
Type a1
bbb As Integer
ccc() As Byte
ddd() As Long
End Type
Type a2
AAA(1 To 5, 1 To 5) As a1
End Type
Public qqq(1 To 10) As a2
Private Sub ts()
qqq(1).AAA(1, 1).bbb = 1
End Sub
Private Sub Main()
Call ts
MsgBox "完了"
End Sub
> それとも私の書き方がおかしいのか?
単に、変数のスコープが間違っていた、という事はありませんか?
すべてのコードに、"Option Explicit" を付けてあるかどうかをチェックしてみてください。
>魔界の仮面弁士様
早速のお返事ありがとうございます
すみません、上記コードだとエラー出ませんね。
エラー出ているのは私が、書いているほうのソースです。
が、構造は一緒なのでなぜエラーが出るか模索している最中なのです
不思議なのは、
qqq(1).AAA(1, 1).
ここでインテリセンスが効かないのと、
qqq(1).AAA(1, 1).bbb
のbbb でShift+F2で定義の確認ができないことです。
先ほど言いました通り、構造は一緒なので書き始めた頃はエラーが発生していませんでした。
インテリセンスは効いていなかった覚えがあります
今日突然エラーを出してきたので、その原因を突き詰めている状態です
うっかり変数がダブっていないかとか、スコープが間違っていないかとか
色々調べている最中なのです。
Option Explicitは付けています。
考えられる可能性として、ここはこういう風にしてる?とか調べる事項でもありましたら
ご教授ください
よろしくお願いします
> うっかり変数がダブっていないかとか、スコープが間違っていないかとか
あるいは、型名の重複はありませんか?
それと、最近追加したコントロールや参照設定が無いか、とか。
> 調べる事項でもありましたら
Type a2
AAA(1 To 5, 1 To 5) As Project1.Module1.a1
End Type
Public qqq(1 To 10) As Project1.Module1.a1
のように、型名をフルネームで指定してみてはどうでしょう?
>のように、型名をフルネームで指定してみてはどうでしょう?
試してみましたが、エラーは消えません。
shift+f2の定義の参照もできません
>あるいは、型名の重複はありませんか?
現在、それを調べています。Grepで一気に調べてみます
>それと、最近追加したコントロールや参照設定が無いか、とか。
最近コントロール等は追加していないので、(昨日までエラーなし、今日突然発生)
多分大丈夫かと思いますが、これも確認してみます
a1のメンバに対してインテリセンス等が効かないのが個人的に??なのですが?
> a1のメンバに対してインテリセンス等が効かないのが個人的に??なのですが?
現象を再現できない以上、お役に立てそうもありませんが、実行時に
ローカルウィンドウやウォッチ式を用いて、それぞれの変数の
型や内容を調べてみたりとか。
> 最近コントロール等は追加していないので
あとは、内部予約語を使ってしまい、VB が誤動作している可能性とか…。
# たとえば、フォームに LockControls という名前のメソッドや
# 変数などを追加していたりとか。
> (昨日までエラーなし、今日突然発生)
Visual SourceSafe 等をお使いであれば、昨日以前のソースコードを
取得して、それらを確認・比較してみるとか。
ツイート | ![]() |