Toon posts:

[vba] declareren als public, geeft fout

Pagina: 1
Acties:
  • 507 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik moet iets declareren als public. ik doe dat zo:

dim naam as string
public x as string
dim achternaam as string

naam=txtnaam.text
x=txtnaam.text
achternaam =txtanaam.text

het programma geeft daarna deze fout:

ongeldig kenmerk in sub of function.

In mijn voorbeeld declareer ik wel een variabele 2 keer, de ene keer noem ik hem naam en de andere keer e. maar dit maakt volgens mij niet uit.

Weet iemand hoe ik dit goed kan doen?

bedankt, j3nz

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Een globale of public variabele moet je declareren in het Declarations gedeelte van je code. In een Sub of Function mag het niet. Vandaar de foutmelding.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
moet ik dan ook boven elk userform dat ding declareren?

want in userform2 staat

label2.caption=e

e had ik in userform1 gedeclareerd en de waarde txtnaam.text gegeven.

hij geeft bij label2.caption=e niets in het label.

:s

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Als het goed is niet. Maar ik heb nog nooit access serieus gebruikt :)

Wat ik zou doen is mn globale variabelen verzamelen in 1 (aparte) module en dan zo aanspreken: Modulenaam.Variabelenaam

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
werkt, bedankt gerco!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Op dinsdag 04 juni 2002 16:00 schreef j3nz het volgende:
werkt, bedankt gerco!
Waarschijnlijk kun je de Modulenaam nog wel weglaten ook, maar ik zou 'em laten staan, omdat je dan geen gezeik kan krijgen met een lokale variabele die toevallig hetzelfde heet als 1 van je globale.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

En daarom kun je het beste je globale variablen een extra letter meegeven, bijvoorbeeld
Public gstrNaam as string om op die manier duidelijk te zien dat gstrNaam een globale variabele is.

Zelfs al zou module.variabele werken, dan nog zou ik NOOIT een lokale variabele een zelfde naam geven als een public variabele. Juist om verwarring en duistere bugs te voorkomen.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Daarom heten mijn globale vars dus ook altijd gNaam op zn hongaars (hangt er vanaf of ik thuis of op mn werk prog, op mn werk geen hongaars) gsNaam (Global String), glNaam (Global Long), gsaNaam (Global String Array), etc.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:39
Nog beter is getters en setters te gebruiken. Maar dat is meteen weer zo'n discussie :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Aaargh!
  • Registratie: Januari 2000
  • Laatst online: 21:21

Aaargh!

Bow for me for I am prutser

Gewoon geen globals gebruiken, als je globals nodig hebt in je programma is je ontwerp fout -> terug naar ontwerpfase

Those who do not understand Unix are condemned to reinvent it, poorly.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:39
Op dinsdag 04 juni 2002 19:20 schreef Aaargh! het volgende:
...als je globals nodig hebt in je programma is je ontwerp fout..
Imho begin je in dat opzicht bij VB(A) al met een achterstand.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Aaargh!
  • Registratie: Januari 2000
  • Laatst online: 21:21

Aaargh!

Bow for me for I am prutser

Op dinsdag 04 juni 2002 20:16 schreef farlane het volgende:
Imho begin je in dat opzicht bij VB(A) al met een achterstand.
Netjes proggen in VB is idd vrij moeilijk

Those who do not understand Unix are condemned to reinvent it, poorly.


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Ach, een soort 'globale klasse' is in dat opzicht net zo fout. Dat is precies hetzelfde als een paar globale variabelen.

Mijns inziens zijn ze niet per definitie fout, wel vaak. Voor de dingen die je meestal in VBA maakt, die vaak beperkt blijven tot hooguit een paar honderd regels is het geen probleem. Wil je iets groters maken doe je het natuurlijk anders.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Op dinsdag 04 juni 2002 19:20 schreef Aaargh! het volgende:
Gewoon geen globals gebruiken, als je globals nodig hebt in je programma is je ontwerp fout -> terug naar ontwerpfase
Hmmm, ik maak regelmatig gebruik van globale variabelen, in VB en VBA, ik zie eigenlijk niet in wat het probleem daar van is. Ik maak meestal gebruik van een public type die van alles over de ingelogde gebruiker bijhoudt, zoals rechten in het programma, inlognaam etc... Verder gebruik ik nog al eens globale variabelen die dingen vasthouden zoals lokale paden, connectiestrings en dingen die ik gewoon tijdens het hele programma direct voor handen wil hebben. Misschien ligt het aan mij, zie ik gewoon iets over het hoofd.

Leg eens uit, wat doe ik dan fout?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:39
Op woensdag 05 juni 2002 11:14 schreef JeroenDega het volgende:
Leg eens uit, wat doe ik dan fout?
Je doet op zich niet iets fout. Echter, applicaties met (veel) globale variabelen hebben de neiging om zeer onoverzichtelijk te worden.

[background info]
Een van de ideeen achter object orientatie is om gegevens in te kapselen in een object, zodat je weet dat als je data aanspreekt altijd dat object moet benaderen. Op die manier heb je veel meer controle over wat er precies verandert, welke data publiek toegankelijk mag zijn, hoe het toegankelijk is etc etc.

OO is mede ontstaan doordat grote softwareprojecten niet meer te onderhouden waren door hun onoverzichtelijkheid.
[/background info]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:39
[Tip+Tikkeltje frustratie]
Aaarraaaaagh, en zet in godsnaam Option Explicit aan. Ben nu een app aan het debuggen die vol met wazige zelfgenererende variabelen zit.
[/Tip+Tikkeltje frustratie]

NB Overigens is die frustratie niet op jou gericht hoor.. :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1