Miten voisi helpommin vertailla n. 20 tekstikentän sisällön toisiinsa (eli etsiä samoja sisältöjä), kuin tekemällä X riviä pitkän ja paljon sisäkkäisiä sisältävän if lausekkeen?
Jos tekstikenttäsi on nimetty yksitellen, niin ei ole muuta vaihtoehtoa kuin miljoona if-tarkistusta. Laita TextBoxisi ControlArrayhin (kaikilla sama nimi, Indexi vain kasvaa aina yhdellä), niin voit käydä nuo läpi kahdella sisäkkäisella silmukalla.
Dim i As Integer
Dim j As Integer
'Indexi alkaa nollasta. Ubound kertoo viimeisen TextBoxin Indexin
For i = 0 To Me.Text1.UBound - 1 'silmukka vain toiseksi viimeiseen boxiin asti, sillä...
For j = i + 1 To Me.Text1.UBound '...tämä silmukka kattaa viimeisen boxin
If Me.Text1(i).Text = Me.Text1(j).Text Then Debug.Print i & " ja " & j & " ovat samat"
Next j
Next iKiitos. Tällä voin kattaa toisen "osaston" mutta toisessa on eri nimet joka boxilla.
Siinä toisessa voisi 'feikata' nämä boksit taulukoksi. Alla hivenen esimerkkiä tällaisesta toiminnasta (tarvitsee 2 aliohjelmaa):
Function GetVal(id As Integer) As String
Select Case id
Case 0: GetVal = text1.Text
Case 1: GetVal = text2.Text
... jne kaikki textboksit
End Select
End Function
' Tällä voi sitten muokata jos haluaa.
Sub SetVal(id As Integer, n As String)
Select Case id
Case 0: text1.Text = n
Case 1: text2.Text = n
... jne kaikki textboksit
End Select
End SubNyt voit viitata tämänkaltaisten aliohjelmien kautta textbokseihin ikäänkuin taulukkoon ^_- (Seuraava koodi lainausta BadSourcelta)
Dim i As Integer
Dim j As Integer
Const LootaMaara = 10 ' Textboksien määrä, Ubound ei nyt toimi
For i = 0 To LootaMaara - 1
For j = i + 1 To LootaMaara
If GetVal(i) = GetVal(j) Then Debug.Print i & " ja " & j & " ovat samat"
Next j
Next iHitsivitsi, toi sqwiik:in idea taitaa toimia kuin junan vessa.. Kiitos!
Aihe on jo aika vanha, joten et voi enää vastata siihen.