[VBA/Access] Lege variabele aanroepen

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

  • Stefke
  • Registratie: December 2000
  • Laatst online: 14:25
Ik heb een functie (VBA/access) als volgt:

code:
1
2
3
4
5
Public var as long

Function set_var (waarde as long)
     var = waarde
end function


Aanroepen met:
code:
1
set_var 1

Ik kan dan bijv. het volgende doen:
code:
1
if var = 1 then


Maar...als ik de functie nog niet aangeroepen heb, dan is die variabele nog leeg, of niet bestaand of hoe dat dan heet. Hoe kan ik dan een if-statement maken, dus:
code:
1
If var = (leeg/niet bestaand/etc etc) then

:?

Nou ja, beetje omslachtig dit (kan ook meteen de gedeclareerde var op 1 instellen in dit geval, maar dan blijft de vraag hetzelfde, dit is maar een voorbeeldje) zit daar al een tijdje op te kloten met workarounds, maar dat moet toch gewoon kunnen lijkt me, refereren aan een niet gevulde variabele

[ Voor 26% gewijzigd door Stefke op 10-08-2005 22:35 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Bij de declaratie van je variabele kun je volgens mij een standaardwaarde opgeven, en anders, als je met een klasse werkt, in je constructor. Stel var gelijk aan Null voordat je de functie aanroept, en vergelijk daarop zodra je het nodig hebt.

Overigens hoort VBA tegenwoordig in Officesuites en -software. :P

PW>>OFF

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Stefke
  • Registratie: December 2000
  • Laatst online: 14:25
-NMe- schreef op woensdag 10 augustus 2005 @ 22:35:
Bij de declaratie van je variabele kun je volgens mij een standaardwaarde opgeven, en anders, als je met een klasse werkt, in je constructor. Stel var gelijk aan Null voordat je de functie aanroept, en vergelijk daarop zodra je het nodig hebt.

Overigens hoort VBA tegenwoordig in Officesuites en -software. :P

PW>>OFF
Dat zou kunnen, maar dan stel ik eigenlijk de vraag verkeerd. De variabelen waarmee ik dit probleem heb zijn objecten, dus bijv. form of control. Die kun je volgens mij niet van tevoren op null stellen, want de enige mogelijke waarden die je aan zo'n variabele kunt toewijzigen zijn de objecten die gedefinieerd zijn in Access (dus bij form natuurlijk de verschillende forms) of "niets", maar niet null (misschien heb ik het verkeerd?!)

Public ActiveForm As Form


O ja, als ik iets doe waarbij een variabele (van dat type) dus niet ingesteld is krijg ik de volgende fout:
fout 91 - objectvariabele of blokvariabele with is niet ingesteld
Ik kan dit wel opvangen door via errorcode bij error 91 wat te loopen, maar dat wil ik eigenlijk anders , dus gewoon in de code een
code:
1
if var (niet ingesteld) then

(want dan krijg ik geen error

[ Voor 26% gewijzigd door Stefke op 10-08-2005 22:48 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Objecten in een variabele zijn pointers naar geheugenadressen. Null is niet meer dan een pointer naar een bepaald geheugenadres dat vooraf door je OS als "leeg" bestempeld is. Ik ken zelf geen VBA, maar in zo'n beetje elke andere taal kun je een null-pointer opslaan in een objectvariabele. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 11:56
Probeer eens te prutsen met Null en Nothing (if var = Null etc.), dat waren geloof ik VBA's codewoordjes voor leeg.

  • Stefke
  • Registratie: December 2000
  • Laatst online: 14:25
Zoals ik al aangeef werkt de "waarde" Null niet, dan krijg ik de zelfde fout

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Beter werken de isNull(..) en isEmpty(..). Ik weet alleen niet meer wanneer je welke moet gebruiken.

[Edit]
Een Long begint waarschijnlijk altijd met 0.

[ Voor 23% gewijzigd door Daos op 11-08-2005 11:35 ]


  • Stefke
  • Registratie: December 2000
  • Laatst online: 14:25
Isempty kende ik nog niet, misschien werkt die, vanavond effe proberen :) (die checkt of een variabele geinitialiseerd is)

(In de help te zien alleen voor een variable van het type variant, maar goed dat kan ik ook gebruiken aangezien een variant alles kan zijn)

[ Voor 57% gewijzigd door Stefke op 11-08-2005 11:54 ]


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Ik had niet de hele post goed gelezen. Ik dacht dat het nog steeds over die Long ging.

Bij objecten kan je de = niet gebruiken. Je moet Is gebruiken.

Visual Basic:
1
2
3
Dim MyObject As Object

If MyObject Is Nothing Then MsgBox "Nothing"

  • Stefke
  • Registratie: December 2000
  • Laatst online: 14:25
Beetje laat ;) maar dat werkt inderdaad, danku :>
Pagina: 1