Toon posts:

[vba] Constanten in formulier declareren

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

Verwijderd

Topicstarter
Goedemorgen,

Ik heb het volgende probleempje met VBA in Access.


Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub knop1_onclick

Dim A as string
Dim B as string

A = "bla"
B = "BLA"

Functie1 A,B

end sub

Sub knop2_onclick
Dim A as string
Dim B as string

A = "bla"
B = "BLA"

Functie4 A,B

end sub


Mijn probleem is, dat er in elke module opnieuw de variabelen gedeclareerd en ingesteld moeten worden. Ik heb geprobeerd om 1 public sub te maken met en daarin de variabelen te declareren maar dit werkt niet (variabelen gelden alleen in de sub zelf, niet in de rest van de code) zie voorbeeld:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sub LadenVariabelen
Dim A as string
Dim B as string

A = "bla"
B = "BLA"
end sub

Sub knop1_onclick
LadenVariabelen
Functie1 A,B

end sub

Sub knop2_onclick
LadenVariabelen
Functie4 A,B

end sub


Met enum kom ik er niet denk ik, want daarmee kan je alleen getallen declareren. Als ik probeer een constante te laden bij het openen van het formulier krijg ik een foutmelding. Heeft iemand een idee, het lijkt mij toch dat dit vrij eenvoudig moet kunnen.

Alvast bedankt

  • TXC
  • Registratie: Oktober 2002
  • Laatst online: 24-12-2025

TXC

Waarom houd je je variabelen niet op je formulier bij? Heb zijn toch variabelen die aan het formulier gekoppeld zijn lijkt me. Als je ze niet op je form wilt zien kun je ze ook nog in een hidden tekstveld zetten.

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 29-04 13:50

Maasluip

Kabbelend watertje

Visual Basic .NET:
1
2
const A = "bla"
const B = "BLA"

Zo iets? Of zijn A en B geen constanten?

Signatures zijn voor boomers.


Verwijderd

Topicstarter
Jawel A en B zijn wel constanten (van een bepaald formulier dan), maar zodra ik const gebruik geeft Access een foutmelding. Na nog een test zie ik dat het te maken heeft met het feit dat 1 van de constanten een object is.

Bij de events kan je gewoon dit gebruiken:
Visual Basic:
1
set Obj1 = forms![bla]


Maar je kan niet "const set" gebruiken

En bij
Visual Basic:
1
const Obj1 as Object = Forms![bla]


Geeft Access foutmelding:
Invalid datatype for constant

[ Voor 17% gewijzigd door Verwijderd op 29-09-2005 11:14 ]


  • Sikkek
  • Registratie: Maart 2004
  • Laatst online: 09:13
Declareer je variabelen aan het begin van de code, dus buiten de subs. Dan kun je ze in de subs gewoon gebruiken....

Verwijderd

Topicstarter
Sikkek schreef op donderdag 29 september 2005 @ 11:30:
Declareer je variabelen aan het begin van de code, dus buiten de subs. Dan kun je ze in de subs gewoon gebruiken....
Had ik ook reeds geprobeerd, Access geeft dan de volgende foutmelding:

The expression after update you entered at the event property setting produces the following error: Invalid Outside procedure.

Volgens de help mis ik een reference of heb ik een spelfout staan in een expressie.

Bij mijn references in VBA heb ik geen "missing links" en spelfouten lijken met sterk omdat ik de declaratie letterlijk heb gekopieerd van de sub naar het begin van de code.

Hieronder heb ik voor de duidelijkheid de letterlijk code neergezet:

Visual Basic:
1
2
3
4
5
Option Compare Database

Set TTP_Object = Forms![FRM_500_Offerte]![Child_002_OfferteRegels].Form
Tabel_ObjectRegels = "SERVER_DATA_501_Offerte_Regels"
Tabel_Criteria = "[Regel_OfferteID]=" & Me.Regel_OfferteID


Nogmaals, als ik deze code in de desbetreffende sub's plak, dan werkt die als een speer.

Edit:
Ps. Het maakt geen verschil als ik de variabelen constant maak, de foutmelding blijft hetzelfde.

[ Voor 7% gewijzigd door Verwijderd op 29-09-2005 11:43 ]


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Stop AI Slop

Verwijderd schreef op donderdag 29 september 2005 @ 11:42:
(...)
Visual Basic:
1
2
3
Option Compare Database

Set TTP_Object = Forms![FRM_500_Offerte]![Child_002_OfferteRegels].Form
Kun je een object als constante declareren? :X

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Verwijderd

Topicstarter
CodeCaster schreef op donderdag 29 september 2005 @ 11:48:
[...]

Kun je een object als constante declareren? :X
Nee, zoals ik ook zelf al had opgemerkt ;) . Maar de vraag is, of er een manier is om 1 maal in een lap code een object te declareren en deze in verschillende subs te gebruiken. Als dit niet kan moet ik namelijk in 10 subs :( (ok, het valt wel mee) hetzelfde object declareren. Dit is toch niet efficient.

  • TXC
  • Registratie: Oktober 2002
  • Laatst online: 24-12-2025

TXC

Je kan toch ook variabelen en objecten op moduleniveau declareren (dus in een module)?

  • Sikkek
  • Registratie: Maart 2004
  • Laatst online: 09:13
Verwijderd schreef op donderdag 29 september 2005 @ 11:42:
[...]


Had ik ook reeds geprobeerd, Access geeft dan de volgende foutmelding:

The expression after update you entered at the event property setting produces the following error: Invalid Outside procedure.

Volgens de help mis ik een reference of heb ik een spelfout staan in een expressie.

Bij mijn references in VBA heb ik geen "missing links" en spelfouten lijken met sterk omdat ik de declaratie letterlijk heb gekopieerd van de sub naar het begin van de code.

Hieronder heb ik voor de duidelijkheid de letterlijk code neergezet:

Visual Basic:
1
2
3
4
5
Option Compare Database

Set TTP_Object = Forms![FRM_500_Offerte]![Child_002_OfferteRegels].Form
Tabel_ObjectRegels = "SERVER_DATA_501_Offerte_Regels"
Tabel_Criteria = "[Regel_OfferteID]=" & Me.Regel_OfferteID


Nogmaals, als ik deze code in de desbetreffende sub's plak, dan werkt die als een speer.

Edit:
Ps. Het maakt geen verschil als ik de variabelen constant maak, de foutmelding blijft hetzelfde.
Wat je dus moet doen is dit:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
Option Compare Database
Option Explicit      'Is wel zo netjes, voorkomt ook domme spelfouten in variabelen!

Dim TTP_Object as Object 'Of form oid
Dim Tabel_ObjectRegels as String
Dim Tabel_Criteria as String

Private sub LaadVariabelen
       Set TTP_Object = Forms![FRM_500_Offerte]![Child_002_OfferteRegels].Form
       Tabel_ObjectRegels = "SERVER_DATA_501_Offerte_Regels"
       Tabel_Criteria = "[Regel_OfferteID]=" & Me.Regel_OfferteID
End sub


In je form_current event (wordt gevuurd als je naar een record gaat) roep je de LaadVariabelen aan, deze variabelen zijn dan in alle andere code te benaderen.

Verwijderd

Topicstarter
Geniaal, dit werkt super. Harstikke bedankt!!! _/-\o_
Pagina: 1