Nej ikke helt en udløber. Men læner sig op af det jeg også søger der, tror jeg.
Her søger jeg efter, hvordan jeg kan definere en variabel som navnet på en userform og kombinere det med et navn på en given kontrol og knytte en egenskab til det hele.
Når jeg forsøger mig med:
En UserForm1 med en TextBox1 og en knap og følgende:
Dim MyVar1, MyVar2 as String MyVar1 = "Userform1" myVar2 = "Textbox1"
msgbox myVar1.myVar2.Text
Får jeg en fejl der lyder: Run-time error '424': Object required.
word-hajen: Det er ikke helt det jeg ude efter. I en løkke har jeg behov for at kunne referere til en ikke statisk specificeret UserForm og en ikke statisk specificeret kontrol, samt henvise til den kontrols text egenskab.
Iøvrigt får jeg fejl når jeg benytter "Me" i mine koder. Bortset fra (og udelukkende kun her) når jeg benytter den sammen med (Un)load Me.
kjulius: Det er præcis hvad jeg er ude efter. Men din kode resulterer hos mig i en fejl der lyder:
Lige netop Forms Collection kan du ikke tilgå med en Streng (som man kan i de fleste andre Collections). Det SKAL være via et Index (tal).
Følgende kode fungerer fint: msgbox Forms(0).Controls(myVar2).Text
nicolaus: Du kan evt. iterere gennem hele Forms Collection, og via navnet finde Index til din form, og derefter bruge ovenstående kode (husk at formen skal være Loaded for at optræde i Forms Collection).
Dim i As Integer For i = 0 To Forms.Count - 1 If Forms(i).Name = MyVar1 Then Exit For Next i MsgBox (Forms(i).Controls(MyVar2).Text)
Bare en sidebemærkning. Hvis du får fejl, når du benytter Me, befinder du dig ikke i din form. Det er alene her, du kan bruge Me. Til gengæld kan du godt bruge Me.txtetellerandet til at kalde en procedure, der befinder sig et andet sted end på din form og du har behov for variabel-control, når blot du så kalder proceduren fra din form.
Ja, i har jo fuldstændig ret i det i skriver. Så mit alternativ er (kan jeg forstå) at adressere min userform med navnet "frmTestetEllerAndetLangtNavn" med:
Userforms(0).txtBox1.Text, såfremt dens index er 0. Og befinder jeg mig på den, kan jeg adressere kontroller med me.txtBox1.Text.
Øhh... nej. Hvis du kalder en procedure i et modul fra din userform, skal du sende formen med. Eksempel:
********kode på formen**** Private Sub cmdOK_Click Call GennemløbKontroller(me) End Sub **************************
*****kode i et modul**** Public Sub GennemløbKontroller(objForm as frmTestetEllerAndetLangtNavn) objForm.txtBox1.text = "Weee....." End Sub ************************
Så lyset i tjacobs løsning af 19/08-2007 11:58:33. Men benytter pt. denne løsning:
Jeg definerer en global variabel, der udstyres med navnet på den txtbox jeg befinder mig i, gennem kontrollens "exit" hændelse. Når jeg siden skal addressere kontrollen, skriver jeg formens navn fuldt ud (uden brug af variabel) efterfulgt af variablen der repræsenterer kontrollen. Altså noget i stil med:
Sub exit ... myCtrl = "txtbox1" End Sub
Sub adressCtrl Userform1(myCtrl).Backcolor = ..... End Sub
Jeg bruger Excel og Word 2003 :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.