Snellere manier om meerdere tekstboxen te activeren?

Status
Niet open voor verdere reacties.

MartijnC86

Gebruiker
Lid geworden
8 jul 2010
Berichten
13
Beste medeformummers,

Mijn tweede vraag, in mijn formulier(waarmee ik nu bezig ben) moet ik een aantal textboxen activeren/deactiveren aan de hand van een combobox. Nu is mij dat gelukt met de onderstaande code. Echter vind ik deze code nogal omslachtig. Is er een snellere manier om deze tekstboxen de activeren/deactiveren? Kan ik werken met een range van tekstboxen?

Met vriendelijke groet,

MartijnC86

Code:
Private Sub ComboBox1_Change()
'Check eerst welke invoer is gegeven
'Check op invoer 13 perioden en geef deze perioden weer
  If ComboBox1.Value = "13 perioden" Then
      TextBox189.Visible = True
      TextBox190.Visible = True
      TextBox191.Visible = True
      TextBox192.Visible = True
      TextBox193.Visible = True
      TextBox194.Visible = True
      TextBox195.Visible = True
      TextBox196.Visible = True
      TextBox197.Visible = True
      TextBox198.Visible = True
      TextBox199.Visible = True
      TextBox200.Visible = True
      TextBox201.Visible = True
'Als de invoer niet 13 perioden is, check dan op invoer 12 maanden
        Else
          If ComboBox1.Value = "12 maanden" Then
          TextBox189.Visible = True
          TextBox190.Visible = True
          TextBox191.Visible = True
          TextBox192.Visible = True
          TextBox193.Visible = True
          TextBox194.Visible = True
          TextBox195.Visible = True
          TextBox196.Visible = True
          TextBox197.Visible = True
          TextBox198.Visible = True
          TextBox199.Visible = True
          TextBox200.Visible = True
          TextBox201.Visible = False
'Als de invoer geen 12 maanden is, check dan op invoer kwartalen
            Else
              If ComboBox1.Value = "kwartalen" Then
              TextBox189.Visible = True
              TextBox190.Visible = True
              TextBox191.Visible = True
              TextBox192.Visible = True
              TextBox193.Visible = False
              TextBox194.Visible = False
              TextBox195.Visible = False
              TextBox196.Visible = False
              TextBox197.Visible = False
              TextBox198.Visible = False
              TextBox199.Visible = False
              TextBox200.Visible = False
              TextBox201.Visible = False
                  Else
                    If ComboBox1.Value = "vrij te benoemen" Then
                      TextBox189.Visible = True
                      TextBox190.Visible = True
                      TextBox191.Visible = True
                      TextBox192.Visible = True
                      TextBox193.Visible = True
                      TextBox194.Visible = True
                      TextBox195.Visible = True
                      TextBox196.Visible = True
                      TextBox197.Visible = True
                      TextBox198.Visible = True
                      TextBox199.Visible = True
                      TextBox200.Visible = True
                      TextBox201.Visible = True
'omdat de gebruiker kiest voor vrij te benoemen, moeten de tekstboxen ingeschakeld worden.
                      TextBox189.Locked = False
                      TextBox190.Locked = False
                      TextBox191.Locked = False
                      TextBox192.Locked = False
                      TextBox193.Locked = False
                      TextBox194.Locked = False
                      TextBox195.Locked = False
                      TextBox196.Locked = False
                      TextBox197.Locked = False
                      TextBox198.Locked = False
                      TextBox199.Locked = False
                      TextBox200.Locked = False
                      TextBox201.Locked = False
                      Else
                        TextBox189.Locked = True
                        TextBox190.Locked = True
                        TextBox191.Locked = True
                        TextBox192.Locked = True
                        TextBox193.Locked = True
                        TextBox194.Locked = True
                        TextBox195.Locked = True
                        TextBox196.Locked = True
                        TextBox197.Locked = True
                        TextBox198.Locked = True
                        TextBox199.Locked = True
                        TextBox200.Locked = True
                        TextBox201.Locked = True
                End If
            End If
        End If
    End If
End Sub
 
Het kan inderdaad wel wat korter:

Code:
Private Sub ComboBox1_Change()
'Check eerst welke invoer is gegeven
Select Case combobox1.Value
    'Check op invoer 13 perioden en geef deze perioden weer
    Case "13 perioden"
        Call Textboxen
    'Als de invoer niet 13 perioden is, check dan op invoer 12 maanden    Case "12 maanden"
    Case "12 maanden"
        Call Textboxen
    'Als de invoer geen 12 maanden is, check dan op invoer kwartalen
    Case "kwartalen"
        Call Textboxen
    Case "vrij te benoemen"
        'omdat de gebruiker kiest voor vrij te benoemen, moeten de tekstboxen ingeschakeld worden.
        For i = 189 To 201
            Me("TextBox" & i).Locked = False
        Next i
        Call Textboxen
    Case Else
        For i = 189 To 201
            Me("TextBox" & i).Locked = True
        Next i
    End Select
End Sub
Code:
Private Sub Textboxen()
Dim i
For i = 189 To 201
    Me("TextBox" & i).Locked = True
Next i
End Sub
 
Topper, echt super bedankt!

Heb ik alleen nog even een vraagje over dat TO

Kan ik ook zeggen:

Code:
For i = 9 To 16, 127 To 134

Dit werkt helaas niet. Weet je wat ik fout doe? Ik wil dus een tweede range geven aan het To

Groeten,

Martijn
 
Wat je fout doet weet je denk ik al; je hebt twee vergelijkingen op één regel staan. Ik zou het zo oplossen:

Code:
Select Case i
    Case 1 To 9
        Me("TextBox" & i).Locked = True
    Case 189 To 201
        Me("TextBox" & i).Locked = True
End Select
Met deze methode kun je heel eenvoudig het aantal bereiken uitbreiden.
 
Ik snap hem toch nog niet helemaal :o
Met de volgende code zet ik een aantal textboxen aan. Echter wil ik dus meer texstboxen toevoegen.
Code:
Private Sub chkjaar1_Click()
' Zet de diverse checkboxen en labels aan
If chkjaar1.Value = True Then
    [B]Call Textboxenjaar1[/B]
    txtjaar1.Enabled = True
    txtAc1.Visible = True
    txtYear1.Visible = True
    TextBox126.Visible = True
    ' Activeer de kolommen
    Sheets("Geprognosticeerde balans").Select
    Columns("G:J").EntireColumn.Hidden = False
Else
    For i = 9 To 16
    Me("TextBox" & i).Visible = False
    txtjaar1.Enabled = False
    txtAc1.Visible = False
    txtYear1.Visible = False
    TextBox126.Visible = False
    ' deactiveer de kolommen
    Sheets("Geprognosticeerde balans").Select
    Columns("G:J").EntireColumn.Hidden = True
Next i
End If
End Sub

Code:
Private Sub Textboxenjaar1()
Dim i
For i = 9 To 16
    Me("TextBox" & i).Visible = True

Next i
End Sub

In deze bovenstaande code (Private Sub Textboxenjaar1) wil ik meer textboxen toevoegen. Alleen snap ik nu niet helemaal hoe ik dat met case moet aanpakken. Heb het volgende geprobeerd:

Code:
Private Sub Textboxenjaar1()
Dim i
Select Case i
    Case 1 To 9
        Me("Textbox" & i).Locked = True
    Case 127 To 134
        Me("Textbox" & i).Locked = True
End Select
End Sub
Dit werkt alleen niet. De macro loopt er overheen zonder iets te doen.

Met vriendelijke groet,

Martijn
 
Ik snap hem toch nog niet helemaal :o

Code:
Private Sub Textboxenjaar1()
Dim i
Select Case i
    Case 1 To 9
        Me("Textbox" & i).Locked = True
    Case 127 To 134
        Me("Textbox" & i).Locked = True
End Select
End Sub
Dit werkt alleen niet. De macro loopt er overheen zonder iets te doen.

Met vriendelijke groet,

Martijn

Hallo Martijn,

Je declareert hier variabele i, maar je geeft deze geen waarde. (oftewel, 0)
Jouw Select statement reageert alleen als de waarde van i tussen 1 en 9 of tussen 127 en 134 ligt.
dus het klopt inderdaad dat de macro niets uitvoert.

Bedoel je soms dit:
Code:
Private Sub Textboxenjaar1()
Dim i
For i = 1 to 134
Select Case i
    Case 1 To 9
        Me("Textbox" & i).Locked = True
    Case 127 To 134
        Me("Textbox" & i).Locked = True
End Select
'bedankt voor het wijzen op de fout martijn..!
Next i
End Sub

Ik vraag me trouwens af of het handig is om zo een enorme userform te maken als je niet zo bekend bent met VBA code
 
Laatst bewerkt:
Mark,

Bedankt voor de hulp, echter ik krijg de foutmelding: For without next
Als ik vervolgens de code aanpas, dan wordt alleen textbox 1 zichtbaar. De rest niet.

Code:
Private Sub Textboxenjaar1()
Dim i
For i = 1 To 134
Select Case i
    Case 1 To 9
        Me("Textbox" & i).Visible = True
    Case 127 To 134
        Me("Textbox" & i).Visible = True
End Select
Next i
End Sub

Ik moet ook toegeven dat vba nog erg moeilijk voor mij is. Alleen het is voor mijn afstudeeropdracht, dus moet het afmaken. Gelukkig leer ik er wel heel veel van.
Groeten,

Martijn
 
Martijn,

Zou het kunnen dat je de naam van de textboxen hebt aangepast?
Probeer anders een voorbeeldbestandje te posten.

Mark.
 
Hallo Mark,

Nee ik heb de namen niet aangepast. Ik wil wel een bestandje bijvoegen, alleen kan ik niet een .xlsm bestandje vinden via 'Beheer bijlagen".

Hoe werkt dat?
 
probeer het als .xls (excel 97-2003 werkmap)

let wel op dat je geen vertrouwelijke of gevoelige informatie verzend.

ps. in een ander topic (Link) verwijs je in een macro naar Me.txtjaar1 als textbox. dat is een textbox met een andere naam dan bijv. textbox1 en dan werkt je macro ook niet.
 
Laatst bewerkt:
Beste Mark,

Helaas bleef me bijlage te groot om te mogen uploaden.(ondanks dat ik al me tabbladen heb weggehaald) Kan ik hem misschien mailen? Ik heb overigens inderdaad me tekstboxen aangepast, maar daar heb ik wel weer rekening mee gehouden in de macro's.

Met vriendelijke groet,

Martijn
 
Heb je er al een Zip bestand van gemaakt? Is meestal wel voldoende om hem te verkleinen...
 
Ik heb het gevonden hoor... ik denk dat je verwijzing niet helemaal correct was.

Je wilt textbox 1 tot 9 zichtbaar maken, terwijl 1 t/m 8 al zichtbaar zijn.
Je bedoelt denk ik textbox 9 tm 16.

Controleer goed of je verwijzingen correct zijn.
je kan ze altijd nog met "ouderwets" pen en papier opschrijven voordat je ze in de code zet ;)

Code:
Private Sub Textboxenjaar1()
Dim i
For i = 1 To 134
    Select Case i
        Case 9 To 16
            Me("Textbox" & i).Visible = True
        Case 127 To 134
            Me("Textbox" & i).Visible = True
    End Select
Next i
End Sub
 
Hartstikke bedankt, ik ben ze toen inderdaad anders gaan noemen en niet helemaal goed opgelet :o

Bedankt voor de hulp!

Probleem = opgelost!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan