Toon posts:

Access/VBA - Formname

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig om een database te voorzien van meerdere talen. Hiervoor heb ik een tabel gemaakt met alle labels, controltexten en tagnames. Voordat het programma begint wordt er een array (LangArray) gevuld met deze drie onderdelen.

Nu wil ik als ik een formulier open, dat hij de juiste texten in de labels plaats. Dit doe ik met de functie 'getlabels'.

Deze functie wordt aangeroepen door:
code:
1
 GetLabels(FrmName)


Dan hebben we de functie getlabels:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Public Sub GetLabels(FrmName)

Dim SqlString As String
Dim I_Max As Integer

I_Max = DCount("[ID]", "ML_Forms")

    For Each Ctrl In FrmName.Controls
              
        If Not Ctrl.Tag = "" And IsNumeric(Ctrl.Tag) Then
            
            I = 1
            Do Until I = I_Max
           
                If Not LangArray(I, 1) = "" Then
            
                    If LangArray(I, 0) = Ctrl.Tag Then
                    
                        Ctrl.Caption = LangArray(I, 1)
                        
                    End If
                
                ElseIf Not LangArray(I, 2) = "" Then
                
                    If LangArray(I, 0) = Ctrl.Tag Then
                    
                        Ctrl.CtrlTiptext = LangArray(I, 2)
                        
                    End If
                    
                End If
            
            I = I + 1
            Loop
            
        End If
    Next Ctrl

End Sub


Bij het openen van een formulier krijg ik de foutmelding 'object vereist'.

Wat ik snap is dat hij op de plek van FrmName, de naam van het formulier zet, bijvoorbeels 'hoofdmenu'. Terwijl er moet staan: Form_hoofdmenu.

Iemand enig idee hoe ik dit probleem kan oplossen?

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 15:09

Maasluip

Kabbelend watertje

Je zet geen type in de declaratie van de subroutine. Probeer het eens met
Public Sub GetLabels(FrmName as Control)

Signatures zijn voor boomers.


Verwijderd

Topicstarter
ok, maar nu geeft hij een foutmelding 'typen komen niet met elkaar overeen', al in het formulier, die de functie aanroept. Wat voor type is een formulier eigenlijk?

Verwijderd

Als je een procedure met een verwijzing naar een object ( het form in dit geval ) aanroept, moet je CALL gebruiken.

Verwijderd

Topicstarter
Goed, vanuit het 'hoofdmenu' staat er:

code:
1
2
3
4
5
Private Sub Form_Load()

...

Call GetLabels(Me.Form.Name)


En in de functie Getlabels:

code:
1
2
3
4
5
6
7
8
9
10
Public Sub GetLabels(FrmName As Control)

Dim SqlString As String
Dim I_Max As Integer

I_Max = DCount("[ID]", "ML_Forms")

    For Each Ctrl In FrmName.Controls

...


maar nog steeds de foutmelding: "typen komen niet met elkaar overeen"

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 15:09

Maasluip

Kabbelend watertje

Hmm, misschien dan FrmName as Form?

ik kan me herinneren dat ik het in VB met as Control deed, maar dat is ook al een tijdje geleden.

edit:
@FFrenzy: ik zie het nu ook. Dat gaat zo niet werken nee.

[ Voor 21% gewijzigd door Maasluip op 27-04-2004 10:57 ]

Signatures zijn voor boomers.


Verwijderd

aaah, nu wordt het wat duidelijker.........

In je aanroep Geef je een string mee, en in de procedure zelf heb je gedefinieerd dat je een Control meegeeft.........gaat er al een belletje rinkelen ?

Verwijderd

Topicstarter
haha, ik snap inderdaad wat je bedoeld... maar je geeft wel een 'educatieve' hint, :*) . Is het de bedoeling dat ik een nieuwe variabele in elke form aanmaak, en die als control declareer?

dim formnaam as control
formnaam = me.form.control

en dan

call getlabels(formnaam)

??

Verwijderd

tweede hint......
Zorg ervoor dat in zowel de aanroep als de procedure je een variabele van het type FORM meegeeft/gebruikt...

Verwijderd

Topicstarter
Ik begrijp wel waar de fout zit. En ik heb hem nu ook zover dat hij geen foutmelding geeft, maar ik weet niet precies op welke manier ik dan die functie moet gaan aanroepen.

getlabels(me), werkt volgens mij niet...

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 15:09

Maasluip

Kabbelend watertje

Verwijderd schreef op 27 april 2004 @ 11:08:
Ik begrijp wel waar de fout zit. En ik heb hem nu ook zover dat hij geen foutmelding geeft, maar ik weet niet precies op welke manier ik dan die functie moet gaan aanroepen.

getlabels(me), werkt volgens mij niet...
Volgens mij zou dit moeten werken als je dit in de form_activate zet. Me is dan het form.

Signatures zijn voor boomers.


Verwijderd

Hier is zoals ik het aan zou pakken....

Functie
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public sub GetLabels (Formulier as Form)

dim c as control

For each c in formulier.controls
  ' Houd er rekening mee dat verschillende controls verschillende te vertalen
  ' properties kunnen hebben !!
  if c.tag <> "" then
    if typeof c is commandbutton then
      ' vertaal commandbutton
    elseif typeof c is label then
      ' vertaal label
    elseif . . . 
      . . . 
    end if
  end if
next  
..
End sub


Houd er rekening mee dat in de bovenstaande procedure C van het type Control is, en Access dus niet precies weet welk control het is, zodat je zelf zult moeten bepalen welke properties je aanpast ( Access geeft niet de specifieke gegevens in zijn dropdownlijstje )

Aanroep
Visual Basic:
1
Call Getlabels (me)

Verwijderd

Topicstarter
okeej het werkt!!! (moet alleen nog gaan spitten door mijn writelabels... m'n array is leeg :'( .. Meld me wel als het niet lukt
Pagina: 1