Om jag vill slå ihop en del av ett objektnam t ex Shape med ett index nr t ex 1 som sedan skall uppfattas som om man direkt skrev Shape1 hur skall jag då göra (jag trodde att det skulle funka med & )? Och när jag ändå frågar kanske nån har en smidigare lösning på detta problem: <code> </code> Lite enklare kanske... :-) Problemet är att varje figur består av flera Shapes: <code> </code> Figur ett shLayout1(1) - shLayout1(4), figur två shLayout2(1) - shLayout2(7), figur tre shLayout3(1) - shLayout3(13). Trodde att det skulle komma till användning att gruppera dom som arrayer och använda for each eftersom att dom är olika långa. <code> </code> Bygger vidare Tack så mycket för all hjälp nu funkar det bra. <code> </code> Det går(Tror jag). Hopslagning av delar av variabelnamn
Om jag har tre st Shape arrayer som jag vill byta färg på beroende på värde i optionkontroller. Dvs det aktiva valets figur skall bli svart dom andra grå. <code> </code>
Men det pinsamma problemet uppstår att när jag i den yttre for-slingan slår ihop arraynamnet med index (dvs arrayindex inte instansindex) så gillas det inte i den inre slingan utan som ni ser här nedan.
Tack på förhand/ Roger
<code>
Private Sub Option1_Click(Index As Integer)
Dim sfarg1 As String, sfarg2 As String, sfarg3 As String
If Option1(0).Value = True Then
sfarg1 = "&H80000012"
sfarg2 = "&H00C0C0C0"
sfarg3 = "&H00C0C0C0"
End If
If Option1(1).Value = True Then
sfarg1 = "&H00C0C0C0"
sfarg2 = "&H80000012"
sfarg3 = "&H00C0C0C0"
End If
If Option1(2).Value = True Then
sfarg1 = "&H00C0C0C0"
sfarg2 = "&H00C0C0C0"
sfarg3 = "&H80000012"
End If
Dim i As Integer
For intloopindex = 1 To 3
i = 1
aktshape = "shLayout" & intloopindex
aktfarg = "sfarg" & intloopindex
For Each t In shLayout1
aktshape(i).FillColor = aktfarg
aktshape(i).BorderColor = aktfarg
i = i + 1
Next t
Next intloopindex
End Sub
</code>Sv: Hopslagning av delar av variabelnamn
Tre OptionButton i en array samt tre Shape i en array.
<code>
Private Sub Option1_Click(Index As Integer)
For i = 0 To 2
Shape1(i).FillColor = &HC0C0C0
Shape1(i).BorderColor = &HC0C0C0
Next
Shape1(Index).FillColor = &H80000012
Shape1(Index).BorderColor = &H80000012
End Sub
</code>
Det är bara att pröva.
/JanneSv: Hopslagning av delar av variabelnamn
Jag tänkte alltså stega genom alla figurer och i varje figur stega genom varje Shape.Sv: Hopslagning av delar av variabelnamn
<code>
Private Sub Option1_Click(Index As Integer)
Dim arrShape(2)
For i = 0 To 2
arrShape(i) = &HC0C0C0
arrShape(i) = &HC0C0C0
Next
arrShape(Index) = &H80000012
arrShape(Index) = &H80000012
For Each ShapeControll In shLayout1
ShapeControll.FillColor = arrShape(0)
ShapeControll.BorderColor = arrShape(0)
Next
For Each ShapeControll In shLayout2
ShapeControll.FillColor = arrShape(1)
ShapeControll.BorderColor = arrShape(1)
Next
For Each ShapeControll In shLayout3
ShapeControll.FillColor = arrShape(2)
ShapeControll.BorderColor = arrShape(2)
Next
End Sub
</code>
Går säkert göras effektivare. Hoppas det fungerar som du vill.
/JanneSv: Hopslagning av delar av variabelnamn
Fortfarande undrar jag ändå (i fall att man skulle behöva det till nåt annat) om det inte skall gå att erhålla ett variabelnamn i två delar och sedan slå ihop dessa för att sedan använda för ett anrop t ex Shape och 1 för att sedan anropa Shape1. Det går ju att få så att en string "Shape1" står på rätt ställe men det funkar ju ändå inte. <code> </code>
Hjälpt men undrande / RogerSv: Hopslagning av delar av variabelnamn
<code>
Dim MyShape as Shape
Set MyShape = Me.Controls("Shape" & 1)
</code>