/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
nulstille variabel
Fra : Carsten Troelsgaard


Dato : 02-12-03 22:48

daw igen

Jeg har lavet 'noget' som indeholder in variabel der akkumulerer en værdi i
et loop - men variablen nulstiller ikke mellem forskellige gennemløb af den
sub der indeholder loopet. For mig at se strider det imod enhver fornuft.
Jeg har prøvet i både klasse og almindeligt modul at nulstille, men den
akkumulerede værdi dobler op for hvert nyt gennemløb alligevel?. Jeg viser
værdien i

msgbox akkumuleret-værdi
'og nulstiller så:
akkumuleret-værdi=0

i klassemodulet ser det sådan ud:

Public Property Get inerti_mp() As Double
inerti_mp = 0
m_inerti_mp = 1 / 12 * m_masse * m_længde ^ 2
inerti_mp = m_inerti_mp
m_inerti_mp = 0
End Property

.............???
er der nogen der har en ide om, hvad der foregår?

Carsten



 
 
preben nielsen (02-12-2003)
Kommentar
Fra : preben nielsen


Dato : 02-12-03 23:49


"Carsten Troelsgaard" <carsten.troelsgaard@mail.dk> skrev i en
meddelelse news:3fcd08a3$0$175$edfadb0f@dread11.news.tele.dk...

> Jeg har lavet 'noget' som indeholder in variabel der akkumulerer
en værdi i
> et loop - men variablen nulstiller ikke mellem forskellige
gennemløb af den
> sub der indeholder loopet. For mig at se strider det imod enhver
fornuft.
> Jeg har prøvet i både klasse og almindeligt modul at nulstille,
men den
> akkumulerede værdi dobler op for hvert nyt gennemløb alligevel?.
Jeg viser
> værdien i
>
> msgbox akkumuleret-værdi
> 'og nulstiller så:
> akkumuleret-værdi=0
>
> i klassemodulet ser det sådan ud:
>
> Public Property Get inerti_mp() As Double
> inerti_mp = 0
> m_inerti_mp = 1 / 12 * m_masse * m_længde ^ 2
> inerti_mp = m_inerti_mp
> m_inerti_mp = 0
> End Property
>

Jeg kan ikke se nogen sammenhæng mellem akkumuleret-værdi og din
property !??!?? Hvad er sammenhængen ??

> er der nogen der har en ide om, hvad der foregår?

Ikke det fjerneste Vis os koden...


--
/\ preben nielsen
\/\ prel@post.tele.dk



Carsten Troelsgaard (04-12-2003)
Kommentar
Fra : Carsten Troelsgaard


Dato : 04-12-03 21:11



> Jeg kan ikke se nogen sammenhæng mellem akkumuleret-værdi og din
> property !??!?? Hvad er sammenhængen ??
>
> > er der nogen der har en ide om, hvad der foregår?
>
> Ikke det fjerneste Vis os koden...

Hej Preben Nielsen
Jeg kan godt se, at jeg ikke har givet dig meget konkret kode at gå efter,
men der er for meget hvis det hele skal med. Men jeg har en lumsk anelse om,
at jeg har fundet den brist som der måske er.

Jeg har lavet en todimensionel punkt-klasse som jeg også kan give en
(single) property "masse". I et modul opretter jeg forskellige instanser af
punkt-klassen og lægger dem enkeltvis i en almindelig collection 'Punkter'.
Nu vil jeg så iterere gennem collectionen 'Punkter' (for/next) og akkumulere
punkternes samlede masse - men resultatet har jeg gode grunde til at tage
med et forbehold.
Fra microsofts library på
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/htm
l/vbcontheoneminuteterminologist.asp
gennemgås tre eksempler på oprettelsen af et 'collections' objekt. Så vidt
jeg kan gennemskue så vil blot det sidste eksempel indeholde en mulighed for
internt at iterere gennem objektets members med for/next - det er det
eksempel som bygger på et klasse-modul oprettet 'collections' objekt. Jeg
citerer:
quote........... snip
Enabling For Each Next
Along with robustness, you get For Each Next back. Once again you can
delegate all the work to the Collection object, by adding the following
method:

' NewEnum must return the IUnknown interface of a
' collection's enumerator.
Public Function NewEnum() As IUnknown
Set NewEnum = mcolEmployees.[_NewEnum]
End Function

The important thing you're delegating to the Collection object is its
enumerator. An enumerator is a small object that knows how to iterate
through the items in a collection. You can't write an enumerator object with
Visual Basic, but because the Employees class is based on a Collection
object, you can return the Collection object's enumerator — which naturally
enough knows how to enumerate the items the Collection object is holding.
The square brackets around the Collection object's _NewEnum method are
necessary because of the leading underscore in the method name. This leading
underscore is a convention indicating that the method is hidden in the type
library. You can't name your method _NewEnum, but you can hide it in the
type library and give it the procedure ID that For Each Next requires.
unquote........
< enumerator-objektet gemmes og indstilles i typebiblioteket:
Tools menu
/Procedure Attributes to open the Procedure Attributes dialog box. In
/Name box, select the
/NewEnum method. Click
/Advanced to show the advanced features. Check Hide this member to make
NewEnum hidden in the type library.
< og her er det at min vba ikke længere kan være med.

....altså, hvis ikke mit collections-objekt kan akkumulere en værdi ved at
iterere, så er det altså objektet's og ikke min skyld!

Carsten



Peter Lykkegaard (05-12-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 05-12-03 08:07


"Carsten Troelsgaard" wrote in a message
....
> < enumerator-objektet gemmes og indstilles i typebiblioteket:
> Tools menu
> /Procedure Attributes to open the Procedure Attributes dialog box. In
> /Name box, select the
> /NewEnum method. Click
> /Advanced to show the advanced features. Check Hide this member to
make
> NewEnum hidden in the type library.
> < og her er det at min vba ikke længere kan være med.
>
Hvad er problemet helt præcist

> ...altså, hvis ikke mit collections-objekt kan akkumulere en værdi ved at
> iterere, så er det altså objektet's og ikke min skyld!
>
Hvis du ikke kan få for ... each til at virke så start med en alm løkke

Er det din collection der skal aflevere en akkumuleret værdi eller beregner
du en akkumuleret værdi på basis af en løkke der iterer igennem din
collection?

- Peter



Carsten Troelsgaard (05-12-2003)
Kommentar
Fra : Carsten Troelsgaard


Dato : 05-12-03 22:29


"Peter Lykkegaard" <polonline@hotmail.com> skrev i en meddelelse
news:18Wzb.51$9a1.16@news.get2net.dk...
>
> "Carsten Troelsgaard" wrote in a message
> ...
> > < enumerator-objektet gemmes og indstilles i typebiblioteket:
> > Tools menu
> > /Procedure Attributes to open the Procedure Attributes dialog box.
In
> > /Name box, select the
> > /NewEnum method. Click
> > /Advanced to show the advanced features. Check Hide this member to
> make
> > NewEnum hidden in the type library.
> > < og her er det at min vba ikke længere kan være med.
> >
> Hvad er problemet helt præcist

vedrørende det ovenstående, så er der ikke en undermenu i Tools hvor der kan
sættes procedure-attributter... i min version af vba (excel, office 2000).
Når NewEnum får attributten 'hidden' + en anden nummer-attribut (id), så vil
for/next fungere inden i et klassemodul over et collection. (følg linket til
artiklen i det bibliotek jeg har kopieret fra)


> > ...altså, hvis ikke mit collections-objekt kan akkumulere en værdi ved
at
> > iterere, så er det altså objektet's og ikke min skyld!
> >
> Hvis du ikke kan få for ... each til at virke så start med en alm løkke

den kører sådan set, men værdien der samles/akkumuleres i min variabel er
forkert. (jeg ved det kan skyldes andre muligheder)
Jeg har ikke testet særlig mange mulgheder, men er gået i 'biblioteket' for
at forstå hvad jeg laver.

> Er det din collection der skal aflevere en akkumuleret værdi eller
beregner
> du en akkumuleret værdi på basis af en løkke der iterer igennem din
> collection?

Jeg ved snart ikke ...
jeg er newbi og vil gerne lave et robust collections-objekt fra starten, -
til at holde styr på de klasser jeg har lavet - og det ser ud som om det
ikke kan lade sig gøre med de praktiske forudsætninger der foreligger.

Carsten



Peter Lykkegaard (06-12-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 06-12-03 11:45

Carsten Troelsgaard wrote:

> vedrørende det ovenstående, så er der ikke en undermenu i Tools hvor
> der kan sættes procedure-attributter... i min version af vba (excel,
> office 2000). Når NewEnum får attributten 'hidden' + en anden
> nummer-attribut (id), så vil for/next fungere inden i et klassemodul
> over et collection. (følg linket til artiklen i det bibliotek jeg har
> kopieret fra)
>
Det vil sige at du er ved at oprette en collection class i vba/excel
Den forklaring du har fået retter sig mod Visual Basic

> Jeg ved snart ikke ...
> jeg er newbi og vil gerne lave et robust collections-objekt fra
> starten, - til at holde styr på de klasser jeg har lavet - og det
> ser ud som om det ikke kan lade sig gøre med de praktiske
> forudsætninger der foreligger.
>
Du kan starte med at præcisere hvilke værktøjer du bruger
Så går resten af processen lidt lettere

Jeg har lige skimmet VBA dokumentationen til Office 2000
Som jeg ser det så skal du nøjes med at oprette en simpel klasse og lade
collection objectet være som det er

Du har tilsyneladende ikke de mulighed for at rette på atrributter etc i VBA
editoren under Office 2000
Vær opmærksom på at der er en del forskellige på VBA og VB
For eksempel er et VB program kompileret, hvor VBA er fortolket kode
Dette kan betyde at en fejl i dit VBA program kan stamme fra mange
forskellige steder, hvorimod det typisk er mere enkelt at fejlfinde i VB

Eksemplet med NewEnum er så vidt jeg lige kan gennemskue ikke kompatibelt
med VBA

- Peter



Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408191
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste