• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

code verkorten

Status
Niet open voor verdere reacties.

bowlingman

Gebruiker
Lid geworden
17 okt 2007
Berichten
433
Hallo,
Ik heb een frm met 30 buttons, die elk een sheet zichtbaar maken en selecteren.
De code is
Code:
Private Sub cboSpeeldag1_Click()
    Unload Me
    Sheets("Speeldag 1").Visible = True
    Sheets("Speeldag 1").Select
End Sub

Private Sub cboSpeeldag2_Click()
    Unload Me
    Sheets("Speeldag 2").Visible = True
    Sheets("Speeldag 2").Select
End Sub

Private Sub cboSpeeldag3_Click()
    Unload Me
    Sheets("Speeldag 3").Visible = True
    Sheets("Speeldag 3").Select
End Sub

Private Sub cboSpeeldag4_Click()
    Unload Me
    Sheets("Speeldag 4").Visible = True
    Sheets("Speeldag 4").Select
End Sub
En zo zou dat moeten t/m cboSpeeldag 30
Kan deze code korter worden geschreven, zodat deze geen 30 x moet herhaald worden.

Grtjs.
Armand
 
waarom gebruik je 30 buttons en niet een selectie lijst of iets anders?

maar als je het met 30 buttons wil kun je ook een macrotje maken waar je het nummer van de speeldag aan doorgeeft.
dan heb je maar een regeltje per button.

groet sylvester
 
Bedoel je het zo?

Code:
dim i as long
 for i = 1 To 30
 sheets("speeldag " & i).visible = true
 next i
unload me
 
Als je een macro maakt met een inputbox waar je het nummer van de speeldag kunt invoeren dan kun je daarna met die input het juiste werkblad tonen.

Sub speeldag()

dag = InputBox("Welke speeldag wilt u bekijken")

Sheets("Speeldag " & dag).Visible = True
Sheets("Speeldag " & dag).Select

End Sub


Er zijn nog een stuk of 10 varianten te bedenken, waarmee je kunt afdwingen dat alleen geldige waarden worden ingevoerd, maar in de basis is het zo simpel als hierboven, zolang elke tabnaam dezelfde naam heeft op het dagnummer na kun je vrij snel het goede werkblad oproepen.
 
Of een multipage form met 30 tab-bladen.
 
Code:
Private Sub cboSpeeldag1_Click()
    tonen 1
End Sub

Private Sub cboSpeeldag2_Click()
    tonen 2
End Sub

Sub tonen(x)
    Unload Me
    With Sheets("Speeldag " & x)
        .Visible = True
        Application.Goto .Range("A1"), True
    End With
End Sub
 
Hallo Medewerkers (denkers),
Bedankt voor jullie snelle reactie
Ik een beetje aan 't klooien geweest met de oplossingen van Harry en Roel
De code van Roel had ik aangepast
Code:
Sub SpeeldagKiezen()
    i = InputBox("Kies je speeldag")
    
    Sheets("Speeldag " & i).Visible = True
    Sheets("Speeldag " & i).Select
End Sub
En dit werkt, maar omdat ik in de file de rest doe met frm's had ik dat ook graag zo gedaan voor het kiezen van de speeldag.
Ik heb op mijn frm een ComboBox en een TextBox gezet en de code van Harry aangepast en uitgebreid
Code:
Private Sub cboOk_Click()
    For i = 1 To 30
        Sheets("speeldag " & i).Visible = True
        Sheets("Speeldag " & i).Select
    Next
Unload Me
End Sub

Private Sub ComboBox1_Change()
    Set oRng = Sheets("LigaDataBase").Columns(14).Find(what:=ComboBox1.Value, lookat:=xlWhole)
        For i = 1 To 1
            Me("TextBox" & i).Value = oRng.Offset(0, i).Value
        Next
End Sub

Private Sub Userform_Initialize()
    ComboBox1.List = Sheets("LigaDataBase").Range("N2:N" & Sheets("LigaDataBase").Cells(Rows.Count, 14).End(xlUp).Row).Value
End Sub
En dit werkt tot op zekere hoogte.
Wanneer ik nu op OK klik worden helaas al de sheets van de speeldagen zichtbaar gemaakt en zou enkel de sheet van de speeldag die is geselecteerd in de ComboBox mogen getoond worden.

Grtjs.
Armand
 
Hallo Rudi,

Uw reactie heb ik te laat gelezen, maar met Uw oplossing moet ik ook mijn "Sub" voor de Speeldag 30x herhalen.

Grtjs.
Armand
 
Armand is het de bedoeling dat er altijd maar 1 speeldag zichtbaar is?
of wil je na de selectie van een andere speeldag dat de vorige weer verdwijnt?
groet sylvester
 
Hallo Sylvester,
Het is de bedoeling dat er steeds maar 1 Speeldag zichtbaar wordt, deze verdwijnt dan terug wanneer alle scores zijn ingebracht en ik op een button klik. (alle 30 sheets zijn verborgen)
Code:
Private Sub cboSluiten_Click()
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("Start").Select
End Sub

Grtjs.
Armand
 
Hallo Jolivanes,

Bedankt voor je reactie en ik heb de code die in het voorbeeld staat aangepast als volgt
Code:
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
    Set oRng = Sheets("LigaDataBase").Columns(17).Find(what:=ComboBox1.Value, lookat:=xlWhole)
        For i = 1 To 1
            Me("TextBox" & i).Value = oRng.Offset(0, i - 3).Value
        Next
    Sheets(ComboBox1.Value).Visible = True: Sheets(ComboBox1.Value).Select
Unload Me
Application.ScreenUpdating = True
End Sub

Private Sub Userform_Initialize()
    ComboBox1.List = Sheets("LigaDataBase").Range("Q2:Q" & Sheets("LigaDataBase").Cells(Rows.Count, 17).End(xlUp).Row).Value
End Sub
en dit werkt perfect.

Ook bedankt aan de andere medewerkers

Grtjs.
Armand
 
Toch nog even een reactie.
Ik heb de code nog een beetje aangepast omdat ik heb gezien dat er eigenlijk overbodige stukken inzaten en de opmaak van de datum in TextBox voor de datum.
Misschien dat anderen hier ook iets aan hebben.
Code:
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
    Set oRng = Sheets("LigaDataBase").Columns(17).Find(what:=ComboBox1.Value, lookat:=xlWhole)
            Me("TextBox1").Value = oRng.Offset(0, -2).Value
            Me("TextBox1").Value = Format(TextBox1.Text, "dddd dd mmmm yyyy")
    Sheets(ComboBox1.Value).Visible = True
Application.ScreenUpdating = True
End Sub
Grtjs.
Armand
 
of

Code:
Private Sub Userform_Initialize()
  for each sh in sheets
     combobox1.tag=combobox1.tag & "|" & sh.name
  next
  
  ComboBox1.List = split(mid(combobox1.tag,2),"|")
End Sub

Private Sub ComboBox1_Change()
   sheets(combobox1.value).visible=true
   sheets(filter(split(mid(combobox1.tag,2),"|"),combobox1.value,false)).visible=2
   Hide
End Sub
 
@snb
Het gebruik v/d eigenschap Tag vind ik persoonlijk geniaal gevonden maar de code werkt niet als niet alle bladen eerst zichtbaar zijn
PS: Werkt ook enkel met False maar niet met Waarde 2

@bowlingman
Dit zou ook kunnen
Code:
Private Sub Userform_Initialize()
    For Each sh In Sheets
        ComboBox1.Tag = ComboBox1.Tag & "|" & sh.Name
    Next
    ComboBox1.List = Split(Mid(ComboBox1.Tag, 2), "|")
End Sub

Private Sub ComboBox1_Change()
    Sheets(ComboBox1.Value).Visible = True
    For Each sh In Sheets
        If Not sh.Name = ComboBox1.Value Then sh.Visible = False
    Next
    Set oRng = Sheets("LigaDataBase").Columns(17).Find(ComboBox1.Value, , xlValues, xlWhole)
    Me("TextBox1").Text = Format(oRng.Offset(0, -2).Value, "dddd dd mmmm yyyy")
End Sub
 
Laatst bewerkt:
Ik wil maar niet begrijpen wanneer je sheets(array(1,2,3)) kunt gebruiken en wanneer niet.

het kan eigenlijk simpeler:
Code:
Private Sub Userform_Initialize()
    For Each sh In Sheets
        c01 = c01 & "|" & sh.Name
    Next
    ComboBox1.List = Split(Mid(c01, 2), "|")
End Sub

Private Sub ComboBox1_Change()
    Sheets(ComboBox1.Value).Visible = True

    For Each sh In Filter(Application.Transpose(ComboBox1.List), ComboBox1.Value, False)
       Sheets(sh).Visible = 2
    Next
    
    TextBox1.Text = Format(Sheets("LigaDataBase").Columns(17).Find(ComboBox1.Value, , xlValues, xlWhole).Offset(0, -2).Value, "dddd dd mmmm yyyy")
End Sub

PS. het aardige van de Tag eigenschap is dat je daar meestal veel meer gegevens in kwijt kunt dan in de control zelf. De max van de tag eigenschap is 64 kb.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan