|
はじめまして。
現在、あるデータを(ある種の)ツリー構造にするため、
Excel2007のVBAでコーディングをしているのですが、
どうしても実現できないので、意見をお借りしたいと思い、
投稿させていただきました。
構築したいデータ構造とは、
各ノードに対して、左と右の要素をもち
親ノード(以下Rootとする)に対して
左の要素には、ユーザ定義型で準備した変数に、
右の要素には、Rootと同じ構造をもつか、データがない状態、
ということを行いたいのです。
また、データの追加は、新規のデータを左の要素にもち、
これまでのツリーを右の要素(子要素)にもつ、新たな
現在のコードを簡略化させたコードが以下になります
================ 標準モジュール Module1 =====================
Public Type SomeType
num As Long
chars As String
End Type
================ クラスモジュール Class1 ====================
Dim typeValue As SomeType
Dim childObj As Class1
Dim depth As Long
Private Sub Class_Initialize()
depth = 0
With typeValue
.num = 0
.chars = ""
End With
End Sub
Public Function createNestObj(childValue As SomeType) As Class1
Dim newValue As New Class1
With newValue
With .typeValue
.num = childValue.num + 1
.chars = childValue.chars & "a"
End With
.depth = Me.depth - 1
Set .childObj = Me
End With
End Function
========================= 以上 ==========================
このようにしたときに、
With .typeValue
の箇所で、コンパイルエラー
「メソッドまたはデータ メンバが見つかりません」
が発生してしまいます。
宣言のDimをPrivateにしても同じコンパイルエラーが発生し、
また、Publicにすると
「定数、〜〜、ユーザー定義型および〜〜はオブジェクトモジュールのパブリックメンバとしては使用できません。」
と出てしまいます。
具体的なイメージとしては、
1+1+1+1
を
(1+(1+(1+(1_$))))
としたいです。
(+と_は2つの子要素をもつノード、$は要素なし:Nothing、
カッコ1組で1つのオブジェクト、"1"には実際には複数の情報をもっている)
現在でもクラスモジュールの数が多く、ごちゃごちゃしてきているのと、
(標準モジュールの量はまだすっきりしています、)
計算速度が求められる処理なので、
2つのクラスモジュールを費やして実現することはできるだけ避けたいです。
(基本はJava使いなので、まだJavaとのクラスの違いに馴染めずにいます。)
改善・改善策でなくとも、全然違うアプローチからでもよいですので、
意見をいただけたらと思います。
よろしくお願いいたします
|
|