[VBA] Variabele in objectnaam plaatsen

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

  • Aakab
  • Registratie: November 2001
  • Laatst online: 17-09-2025
Ik heb 6 labels. Allen met een verschillende achtergrondkleur. Voor iedere label heb ik een knop aangemaakt. Als er op de knop geklikt word, word er een waarde meegegeven naar functie "functie". Deze zou dan de label moeten controleren op achtergrond kleur en daarna iets moeten doen.

Voorbeeld

code:
1
2
3
4
Private Sub cmd1_Click()
functie (1)

End Sub


code:
1
2
3
4
5
6
7
8
9
Private Sub functie(x)

If lbl1.backcolor = &HFFFFFF Then
msgbox "hallo hij is wit!"
else
msgbox "hij is niet wit!"
end if

end sub


Ik wil nu bij lbl1.backcolor de 1 vervangen door de x. Als ik lbl(x).backcolor doe dan geeft hij een error aan. Hoe kan ik dit oplossen?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je kunt een label gewoon ByRef meegeven aan een functie hoor :?

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
Private Sub Blah(ByRef MyLabel as Label, ByVal MyColor as Color)
    MyLabel.BackColor = MyColor
    '...of...
    If MyLabel.BackColor = &hffffff
        msgbox("Wit!")
    else
        msgbox("Niet wit!")
    end if
End Sub

Blah(Label1, vbRed)

[ Voor 33% gewijzigd door RobIII op 02-03-2007 14:01 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Aakab
  • Registratie: November 2001
  • Laatst online: 17-09-2025
Rob bedankt voor je reply, maar de code die ik gegeven heb is niet de "echte" code. Ik heb het in een dusdanige verhaal geplaatst zodat het duidelijk is.

Waar het me dus om gaat is eigenlijk heel simpel. Ik heb een variabele, en ik wil die opnemen in de naam van een label

bijvoorbeeld

dim x as string
x = "1"

lbl(x).backcolor= black

dat hij er dus lbl1.backcolor van maakt.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat jij zoekt zijn control arrays...

Visual Basic:
1
2
3
Dim X as integer

lbl(x).caption = "test"


Kwestie van meerdere labels met de zelfde naam op je form pleuren en ze allemaal een index geven.

En anders kun je nog via de controls collection van je form door je controls itereren en de .name property opvragen (en zodoende de juiste control zoeken en setten).

[ Voor 29% gewijzigd door RobIII op 02-03-2007 14:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Stiegl
  • Registratie: Mei 2004
  • Laatst online: 20-07 14:59
Control array gaat niet werken in VBA..

Je zou het volgens mij zo kunnen oplossen:
Visual Basic:
1
2
3
4
Dim arrLabels() As Variant
arrLabels = Array(Label1, Label2, Label3)
'---Get backcolor of label1
MsgBox arrLabels(0).BackColor


Edit: ietsje netter gemaakt

[ Voor 11% gewijzigd door Stiegl op 02-03-2007 14:16 ]

Uit onderzoek is gebleken dat 85% van alle statistieken niet klopt


  • Aakab
  • Registratie: November 2001
  • Laatst online: 17-09-2025
RobIII schreef op vrijdag 02 maart 2007 @ 14:09:
Wat jij zoekt zijn control arrays...

Visual Basic:
1
2
3
Dim X as integer

lbl(x).caption = "test"


Kwestie van meerdere labels met de zelfde naam op je form pleuren en ze allemaal een index geven.
Ja dat bedoel ik dus! Maar in VBA werkt dat dus niet :(
"Sub of functie niet gedefinieerd" krijg ik dan plus hij markeert lbl geel...

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Aakab schreef op vrijdag 02 maart 2007 @ 14:14:
[...]


Ja dat bedoel ik dus! Maar in VBA werkt dat dus niet :(
"Sub of functie niet gedefinieerd" krijg ik dan plus hij markeert lbl geel...
Dan kun je nog altijd je controls collection aflopen zoals ik al zei.

Overigens: Waar hoort mijn topic?

VBA = OFF

PRG >> OFF

[ Voor 13% gewijzigd door RobIII op 02-03-2007 14:20 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Aakab
  • Registratie: November 2001
  • Laatst online: 17-09-2025
Dat zei je na je edit...

  • Aakab
  • Registratie: November 2001
  • Laatst online: 17-09-2025
Het gaat er bij mij nog steeds niet in.

Ik heb een txt ding met als naam txt1.

nu heb ik bijvoorbeeld de code:

txt1.enabled=true
dat werkt perfect. Maar als ik bijvoorbeeld 10000 txt dingen in een loop wil plaatsen dan werkt het dus voor geen meter

dim x as integer
x = 1

txt(x).enabled = true

hier gaat het al mis :(
Ik heb van alles geprobeerd:
txt&x&.enabled
txt"x".enabled

dim naam as string
dim x as integer
x = 1
naam = "txt"
naam = naam +cstr(x)
msgbox naam

dan geeft ie gewoon keurig txt1, waarom doet hij dat dan niet met txt1.enabled?

  • Stiegl
  • Registratie: Mei 2004
  • Laatst online: 20-07 14:59
Wat RobIII bedoelt is zoiets:

Visual Basic .NET:
1
2
3
4
5
6
7
8
    For Each ctrl In UserForm1.Controls
        If TypeOf ctrl Is Label Then
            '--- Doe iets met ctrl
            If ctrl.BackColor = &hffffff Then
                MsgBox "Wit"
           End If
        End If
    Next

Door alle controls van de form loopen.
Maar heb je mijn andere oplossing al geprobeerd? Daarmee kan je de labels wel direct benaderen.

Uit onderzoek is gebleken dat 85% van alle statistieken niet klopt


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Misschien moet je je eens verdiepen in verwijzen naar elementen van een collectie ;)
Als labelnaam het eerste control is op hetForm dan is al het volgende equivalent:

Visual Basic:
1
2
3
4
5
6
7
8
dim strVar as string, intX as integer
strVar="labelnaam"
intX=1

hetFrom!labelnaam
hetFrom.controls("labelnaam")
hetFrom.controls(strVar)
hetForm.controls(intX)

[ Voor 24% gewijzigd door Lustucru op 02-03-2007 15:34 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Stiegl
  • Registratie: Mei 2004
  • Laatst online: 20-07 14:59
Lustucru schreef op vrijdag 02 maart 2007 @ 15:31:
Misschien moet je je eens verdiepen in verwijzen naar elementen van een collectie ;)
Als labelnaam het eerste control is op hetForm dan is al het volgende equivalent:

Visual Basic:
1
2
3
4
5
6
7
8
dim strVar as string, intX as integer
strVar="labelnaam"
intX=1

hetFrom!labelnaam
hetFrom.controls("labelnaam")
hetFrom.controls(strVar)
hetForm.controls(intX)
Ik merk dat ik te lang niet meer heb geVBA-ed ;)
Maar zo moet het natuurlijk
Het probleem is dat je met een VB-achtergrond gaat zoeken naar control array achtige oplossingen.

[ Voor 8% gewijzigd door Stiegl op 02-03-2007 15:38 ]

Uit onderzoek is gebleken dat 85% van alle statistieken niet klopt

Pagina: 1