• 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.

Tabblad weeknummer automatisch zichtbaar maken

Status
Niet open voor verdere reacties.

lsp1972

Gebruiker
Lid geworden
8 jul 2013
Berichten
69
Goedemiddag,

Met deze VBA kan ik een sheet/tabblad zichtbaar maken..
Nu wil ik tabbladen van 53 weken allemaal verbergen, en in een cel in plaats van x met een weeknummer, alleen dat tabblad zichtbaar maken.

hoe krijg ik deze vba variabel?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("a2")) Is Nothing Then
If Target = "x" Then
Sheets("blad2").Visible = True
Else
Sheets("Blad2").Visible = False
End If
End If
End Sub
 
Zoiets:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "A2" Then
        If Target = DatePart("ww", Datum, vbMonday, vbFirstFourDays) Then Sheets(CStr(Target.Value)).Visible = True
    End If
End Sub
Maar beter plaats je een voorbeeld document.
 
Laatst bewerkt:
Deze code in thisworkbook zetten:

Code:
Private Sub Workbook_Open()
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Worksheets
        sh.Visible = sh.Range("A2").Value = Application.WorksheetFunction.WeekNum(Date)
    Next
End Sub
 
@luc,
gevaarlijk, je moet altijd minstens 1 werkblad zichtbaar hebben, op die manier riskeer je in de problemen te komen.
Misschien best eerst de allerlaatste sheet zichtbaar maken en dan pas je loop aflopen.
 
Beide VB staan nu in deze excel...

Ik ga nog een vba beveiliging voor bewerken toevoegen, maar dat gaat me nu zelf wel lukken..

maar ik wil dus elke week een nieuwe weektab openen en de andere weken dicht zetten. Zodat alleen de lopende week ingevuld kan worden.
 

Bijlagen

  • Verbergen_Weeknum.xlsm
    22,1 KB · Weergaven: 60
@Cow18,
Wat je zou kunnen doen:
1 Verborgen werkblad waarop de tekst staat: "Dit bestand is niet bruikbaar zonder de macro's in te schakelen".

Bij het sluiten van het bestand verberg je alle werkbladen behalve dat éne met die info-tekst.
Wanneer de macro's worden ingeschakeld verberg je dat éne werkblad, en open je het werkblad met de juiste weeknummer.

Uiteraard moet de programmeur dan wel voldoende werkbladen aanmaken voor elke week van het jaar.
Eventueel kan nog een extra werkblad gemaakt worden dat zichtbaar wordt wanneer het weeknummer niet gevonden wordt.
Dit met de tekst: "Er zijn problemen met dit bestand. Gelieve xxx te contacteren voor dit probleem"

Doe je het niet op deze manier dan is de kans bijna onvermijdelijk dat er 's iemand begint te werken zonder de macro's in te schakelen.
Maar goed, dat was uiteraard de vraag niet.

PS. Het hierboven geposte bestand (had ik daarnet nog niet geopend) heeft het probleem dat ik hier beschrijf.
Er is geen enkel werkblad gevonden met de huidige weeknummer op de juiste plaats :).

Overigens is het echt niet nodig om de weeknummer in het werkblad zelf te plaatsen. Je kan ook naar de werkbladnaam verwijzen. Maar dan moeten je werkbladnamen op de een of andere manier getallen bevatten. Dat kan iets zijn zoals een zuiver getal (1; 2; 3 enz) Of een tekst gevolgd door een getal (week 1; week 2; week 3 enz)
 
Laatst bewerkt:
je kan overwegen om een leeg werkblad "laatste" te maken en die zal getoond worden als geen enkele week voldoet.
Daarnaast gebruiken we in europa ISO-weeknummering, dus code 21
Code:
Private Sub Workbook_Open()
   Dim sh      As Worksheet
   
   With Sheets("Laatste")
      .Move after:=Worksheets(Sheets.Count)  '-->een dummy leeg werkblad, die altijd achterin staat
      .Visible = True
   End With
   
On Error Resume Next

   For Each sh In ThisWorkbook.Worksheets
      sh.Visible = sh.Range("A2").Value = Application.WorksheetFunction.WeekNum(Date[COLOR="#FF0000"], 21[/COLOR])   'ISO-week (vanaf excel2013)
   Next
End Sub

Ik zie dat Luc op dezelfde denkpiste zit
 
Laatst bewerkt:
of
Code:
Sub VenA()
  If IsError(Evaluate(Format(Application.WeekNum(Date, 21), "00") & "!A1")) Then
    MsgBox "Week bestaat niet"
   Else
    For Each sh In Sheets
      sh.Visible = sh.Name = Format(Application.WeekNum(Date, 21), "00")
    Next sh
   End If
End Sub
 
Waarom zoveel bladen als het op 1 blad ook kan?
 

Bijlagen

  • Verbergen_Weeknum.xlsm
    32,4 KB · Weergaven: 47
Waarom zoveel bladen als het op 1 blad ook kan?

Bedankt voor je input..

het worden weekrapporten die per week bewaard moeten blijven en andere personen alleen hun deel in dat werkbald invoeren.

Maar wel heel mooi zo dat systeem...
 
of het nu op 1 blad bewaard blijft of op 52 bladen is toch gelijk?
 
je kan overwegen om een leeg werkblad "laatste" te maken en die zal getoond worden als geen enkele week voldoet.
Daarnaast gebruiken we in europa ISO-weeknummering, dus code 21
Code:
Private Sub Workbook_Open()
   Dim sh      As Worksheet
   
   With Sheets("Laatste")
      .Move after:=Worksheets(Sheets.Count)  '-->een dummy leeg werkblad, die altijd achterin staat
      .Visible = True
   End With
   
On Error Resume Next

   For Each sh In ThisWorkbook.Worksheets
      sh.Visible = sh.Range("A2").Value = Application.WorksheetFunction.WeekNum(Date[COLOR="#FF0000"], 21[/COLOR])   'ISO-week (vanaf excel2013)
   Next
End Sub

Ik zie dat Luc op dezelfde denkpiste zit

bedankt, ik denk dat ik nog iets verkeerd doe, hij komt in het voorbeeld bestand telkens uit op "laatste"
 

Bijlagen

  • Verbergen_Weeknum (1).xlsm
    27,1 KB · Weergaven: 29
of het nu op 1 blad bewaard blijft of op 52 bladen is toch gelijk?

in principe wel, maar in mijn denken zat losse tabbladen: die ik kan beveiligen en verbergen, zodat ze niet vooraf maar zeker niet achteraf zaken kunnen aanpassen.
 
probeer deze eens
Code:
Private Sub Workbook_Open()
   Dim sh      As Worksheet
   
   With Sheets("Laatste")
      .Move after:=Worksheets(Sheets.Count)  '-->een dummy leeg werkblad, die altijd achterin staat
      .Visible = True
   End With
   
On Error Resume Next

   For Each sh In ThisWorkbook.Worksheets
      sh.Visible = sh.Name = Application.WorksheetFunction.WeekNum(Date, 21)   'ISO-week (vanaf excel2013)
   Next
End Sub
 

Bijlagen

  • Verbergen_Weeknum (hs).xlsm
    29 KB · Weergaven: 29
hij komt in het voorbeeld bestand telkens uit op "laatste"
op een bepaald ogenblik vergelijk je een getal (bv. 51)met een string ("laatste") en gaat het mis, maar dat merk je niet door die "on error ...".
Dus ofwel gebruik je de methode VenA in #8 ofwel dit, afhankelijk van de opmaak van je nummers
Code:
       sh.Visible = sh.Name = CStr(Application.WorksheetFunction.WeekNum(Date, 21))   'ISO-week (vanaf excel2013)
 
Laatst bewerkt:
Kleine aanpassing

Ik ben zelf aan het freubelen geweest, maar krijg het niet voor elkaar om niet alleen de huidige week... (Wat dus super werkt) maar ook de vorige week te openen bij opstarten van de excel.

Kan dit door het toevoegen van 1 regel in VBA ?
 
Het zou handig zijn als we ook wisten hoe je bestand tot nu toe werkt, maw welke van de aangereikte oplossingen is in de praktijk gebruikt?

Dus kun je het huidige bestand (of een geanonimiseerd) voorbeeld daarvan posten?
 
Het zou handig zijn als we ook wisten hoe je bestand tot nu toe werkt, maw welke van de aangereikte oplossingen is in de praktijk gebruikt?

Dus kun je het huidige bestand (of een geanonimiseerd) voorbeeld daarvan posten?

Je hebt natuurlijk helemaal gelijk... Op dit moment zit deze VBA er in voor "thisworkbook"
Code:
Private Sub Workbook_Open()
   Dim sh      As Worksheet
   
   With Sheets("Kalender")
      .Move after:=Worksheets(Sheets.Count)  '-->een dummy leeg werkblad, die altijd achterin staat
      .Visible = False
   End With
   
On Error Resume Next

   For Each sh In ThisWorkbook.Worksheets
      sh.Visible = sh.Name = Application.WorksheetFunction.WeekNum(Date, 21)   'ISO-week (vanaf excel2013)
   Next

End Sub

Dus naast huidige week, zou ik ook graag vorige week open hebben.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan