How to implement an array filled with objects inside a class in VBA -


i have tried implement several different ways , missing something.

class cunit includes array of cpanel objects -

private ppanel() cpanel  public property panel(optional rindex integer) cpanel     if rindex = 0         panel = ppanel     else         panel = ppanel(rindex)     end if end property  public property let panel(optional rindex integer, value variant)     if rindex = 0         ppanel = value     else         ppanel(rindex) = value     end if end property 

body of module:

function unitbom(unit cunit) cunit  set unitbom = unit  dim panels() cpanel redim panels(1 unitbom.numpanels) dim paneltemp cpanel set paneltemp = new cpanel dim variant  = 1 unitbom.numpanels     set panels(i) = paneltemp next  unitbom.panel = panels() 

this works

panels(1).width = 1 

when run "object variable or block variable not set."

unitbom.panel(1).width = 2 

you guys have forgive me because have not explained well. need array of cpanel objects inside cunit object. problem when create cunit object, dont know how big make cpanel array. attempting create temporary array proper size know size should , set cunit array equal temporary array in order "size" it. there far better way of accomplishing same thing.

from can guess out of (few) pieces of code of yours, there coding errors think derive code logic reviewed:


get property

code:

public property panel(optional rindex integer) cpanel     if rindex = 0         panel = ppanel     else         panel = ppanel(rindex)     end if end property 

should rewritten because since returning panel type object (...as cpanel) should add set keyword before each panel occurrence in left side of assignment statements:

public property panel(optional rindex integer) cpanel     if rindex = 0         set panel = ppanel     else         set panel = ppanel(rindex)     end if end property 

but again in case rindex = 0 error since you'd try set panel type object array of panel objects, quite not same!

so adopt variant approach:

public property panel(optional rindex integer) variant     if rindex = 0         panel = ppanel     else         set panel = ppanel(rindex)     end if end property 

which still (successfully) allow such statement as:

unitbom.panel(1).width = 2 

but (unsuccessfully) allow such statement as:

unitbom.panel().width = 2  

which (and hopefully, too) don't need, nevertheless class allow ...

so maybe review functionality of cunit class and, instance, adopt default rindex:

public property panel(optional rindex integer) cpanel     if rindex = 0 rindex = 1     set panel = ppanel(rindex) end property 

let property

this used such statement as:

unitbom.panel(1) = unitbom.panel(2) 

to have both panel(1) , panel(2) refer same panel object

but have use set keyword once again

public property let panel(optional rindex integer, value variant)     if rindex = 0         ppanel = value     else         set ppanel(rindex) = value     end if end property 

Comments

Popular posts from this blog

javascript - Thinglink image not visible until browser resize -

firebird - Error "invalid transaction handle (expecting explicit transaction start)" executing script from Delphi -

mongodb - How to keep track of users making Stripe Payments -