Change label name with loop

M

merlynknight

Suppose I have a userform with 10 labels on it named
Label1, Lable2, Label3 ... Label10. These labels have different
captions depending on user chosen uses.
The captions can be defined by different arrays such as
vArray1=Array("Apples", "Oranges" ,"Lemons"...)
vArray2=Array("Red","Yellow","Blue",...)

Is it possible to change the captions using a For statement like

Sub LabelCaptions
Dim oLabel as control, i as integer
With UserForm1
For i = 1 To 10
Set oLabel =( "Label" & i )
oLabel.Caption = vArray1(i)
Next
End With
End Sub

When I try this I get an Error at the Set Statment
How can I set oLabel to the variable name
Thanks
Merlyn
 
D

Dave Peterson

Dim myCaps As Variant
Dim iCtr As Long

'0 based array
myCaps = Array("red", "white", "blue")

For iCtr = LBound(myCaps) To UBound(myCaps)
Me.Controls("Label" & iCtr + 1).Caption = myCaps(iCtr)
Next iCtr

You could use that variable if you wanted:

dim oLabel as control
...
set olabel = me.controls("Label" & i)
 
J

Jim Thomlinson

Your close but you are still missing a few things.

Unless you have specified option base 1 then your array starts at 0 and you
will blow through your upper bound. Count from 0 to 9. Since you have no
label zero you will have to add 1 to your label counter.

The line
Set oLabel =( "Label" & i )
is trying to set your control to a string. You want
Set oLabel = Controls("Label" & i + 1)

Finally don't bother using integer. VB converts int to long anyways so you
are better off to just use long. Here is my final code...

Sub LabelCaptions()
Dim oLabel As Control, i As Long, vArray1() as String

vArray1 = Array("Apples", "Oranges", "Lemons")
With UserForm1
For i = 0 To 2
Set oLabel = Controls("Label" & i + 1)
oLabel.Caption = vArray1(i)
Next i
End With
End Sub
 
R

Rick Rothstein

Just as a point of interest, your code can be reduced to this if desired...

Sub LabelCaptions()
Dim i As Long
For i = 0 To 2
Controls("Label" & (i + 1)).Caption = Array("One", "Two", "Three")(i)
Next i
End Sub

I changed your label names so the assignment line wouldn't wrap.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top