Avatar billede martin_moth Mester
21. oktober 2002 - 12:57 Der er 8 kommentarer og
1 løsning

kontrolarray i VBA Excel

Kan man virkelig ikke lave et kontrolarray ud af f.eks. text-felter i VBA til Excel, altså

For i = 1 to 5
  Text(i).text = "Textfelt med index nr. " & i
Next i

Eller skal textfelter osv. virkelig have unikke navne uden mulighed for index??? (hvor tåbeligt, hvis det er tilfældet :o(
21. oktober 2002 - 13:03 #1
Hvis dine felter hedder Text1-5 så kan du f.eks. gøre det således:
For i = 1 To 5
    Me.Controls("Text" & i).Value = "Textf....."
Next i
Avatar billede martin_moth Mester
21. oktober 2002 - 14:48 #2
Yep - det ved jeg godt. Men kan man ikke lave et "rigtigt" kontrolarray?
21. oktober 2002 - 15:05 #3
Kontrolarray'et som du taler om er allerede lavet - det hedder Me.Controls - det er selvfølgelig alle controls, om du kan lave det kun med text-felter har jeg ikke set før, men måske.
Jeg kunne finde på at lege med det således:

For Each ctrTemp In Me.Controls
    Select Case TypeName(ctrTemp)
        Case "TextBox"
            ' Something
        Case "CheckBox"
            ' Something
        Case Else
            ' Nothing
    End Select
Next
Avatar billede martin_moth Mester
21. oktober 2002 - 15:19 #4
Det jeg eftersøgte var muligheden for at lave en masse kontroller (fx. textboxe) med SAMME navn og et index, altså MinTextBox(index). Man kan i VB, men åbenbart ikke i VBA :o(
Tak for hjælpen
21. oktober 2002 - 15:21 #5
Nå ja - har leget med det engang - det er ikke i VBA
Avatar billede bak Forsker
21. oktober 2002 - 16:13 #6
Du kan ikke i VBA lave et controlarray, men du kan lave et array med controller.

Private Sub UserForm_Initialize()
Dim Textb() As Control
Dim ctl As Control
cnt = 0
For Each ctl In UserForm1.Controls
  If TypeName(ctl) = "TextBox" Then
    cnt = cnt + 1
    ReDim Preserve Textb(1 To cnt)
    Set Textb(cnt) = ctl
  End If
Next ctl
Textb(2).Value = "test"
End Sub
Avatar billede bak Forsker
21. oktober 2002 - 16:45 #7
Tilpasset din sætning.
Hvis du DIMmer Text() som public i et alm. modul vil du altid have array'et til rådighed.

Private Sub UserForm_Initialize()
Dim Text() As Control
Dim ctl As Control

cnt = 0
For Each ctl In Me.Controls
  If TypeName(ctl) = "TextBox" Then
    cnt = cnt + 1
    ReDim Preserve Text(1 To cnt)
    Set Text(cnt) = ctl
  End If
Next ctl

For i = 1 To cnt
  Text(i).Text = "Textfelt med index nr. " & i
Next

End Sub
21. oktober 2002 - 19:47 #8
bak>> i den rene VB kan du f.eks. indsætte 10 knapper til tallene på en lommeregner, hvis du nu vil lave en sådan, og danner VB automatisk en array med disse knapper hvis du svarer ja til et spørgsmål. Du laver den første knap og kopi/indsæt og så får du et spørgsmål - det gør man ikke i VBA.
Avatar billede bak Forsker
21. oktober 2002 - 19:56 #9
Tak Flemming, Jeg vidste ikke det var så enkelt i VB. jeg har godt VB6, men har aldrig rigtig brugt det.
Min kommentar stammer fra et spørgsmål til J. Walkenback med det tilhørende svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester