Toon posts:

[VBA] Excel Variabele Objectnaam

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

Verwijderd

Topicstarter
We hebben 10 checkboxen, allemaal onzichtbaar. Deze willen we op een bepaald moment zichtbaar laten maken. Nu kunnen we doen 10 keer objectnaam.visible = true, maar zorgt voor veel programmacode. Het lijkt ons mooier, dat we dit kunnen oplossen d.m.v. een for next loopje, waarbij de teller een onderdeel wordt van de objectnaam.

Voorbeeld:

Dim objectnaam as Object
Dim tussenvar as string

For regel = 1 to 10
tussenvar = "CheckBox"
tussenvar = tussenvar & regel
objectnaam.visible = true
next regel

Deze code is niet compleet, omdat de waarde van tussenvar niet overgebracht kan worden naar de variabele objectnaam daar deze als object is gedefinieerd. Het systeem geeft natuurlijk een melding hierover.

Wie kan ons helpen met dit probleem. Mocht verdere toelichting noodzakelijk zijn dan horen wij dat graag.

Alvast bedankt voor het meedenken!

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
code:
1
2
3
4
Dim objectnaam(1 To 10) As Object
For i = 1 To 10
    objectnaam(i).visible = True
Next


:?

  • KingRichard
  • Registratie: September 2002
  • Laatst online: 17-08 19:31

KingRichard

former Duke of Gloucester

Deze oplossing werkt als je de namen van de checkboxes die je wilt laten zien met "cb" laat beginnen.
Visual Basic:
1
2
3
4
5
6
Dim ctrl as object
For Each ctrl In frmMijnFormulier.Controls
If Left$(ctrl.Name, 2) = "cb" Then
    ctrl.Visible=True
End If
Next ctrl

Er is geen eenvoudige manier om VBA code te laten uitvoeren die in runtime gegenereerd wordt, zoals bijvoorbeeld wel kan in Javascript:
JavaScript:
1
eval("tussenvar=\"object" + regel + "\"");

Het is ook niet mogelijk om van een willekeurige Control het type te bepalen.
Ik moet er wel bij zeggen dat ik hier werk met Office 97, dus misschien is dit verouderde informatie.

[ Voor 6% gewijzigd door KingRichard op 20-03-2003 16:25 . Reden: Typo ]

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


Verwijderd

Topicstarter
Oja voor diegene die nog de oplossing willen weten..

Whitetiger kwam met de volgende oplossing.. bedankt!!


Private Sub CommandButton1_Click()

Dim baseName As String
Dim tmpName As String
Dim controlIndex As Integer
Dim controlNumber As Integer
Dim index As Integer
Dim aantalCheckBoxen As Integer

aantalCheckBoxen = 2
baseName = "CheckBox"

Rem
For index = 1 To aantalCheckBoxen
Rem naam maken
tmpName = baseName + CStr(index)

Rem juiste control vinden
For controlIndex = 0 To Me.Controls.Count
If (Me.Controls(controlIndex).Name = tmpName) Then
controlNumber = controlIndex
controlIndex = Me.Controls.Count

End If
Next

Rem onzichtbaar maken als value = false
If (Me.Controls(controlNumber).Value = False) Then
Me.Controls(index).Visible = False
End If
Next

End Sub