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

Werkbladen wissen met Macro

Status
Niet open voor verdere reacties.

TempoWillem

Gebruiker
Lid geworden
8 okt 2015
Berichten
39
Hallo kenners,

Ik ben weer tegen een nieuw probleempje aangelopen waar jullie wellicht mee kunnen helpen.

In een werkmap wordt iedere week een werkblad opgeslagen met de naam "Week X" waarbij de X staat voor het bijbehorende weeknummer. Nu wil ik aan het begin van een nieuw jaar met een schone lei beginnen, dus moeten alle week bladen weg zodat deze opnieuw opgeslagen worden gedurende het jaar. Kortom: in ieder geval 1 x per jaar moeten alle werkbladen met die naamsopbouw gewist worden.
Nou kan ik wel een macro maken die ieder werkblad benoemt en wist, maar dan komt een foutmelding als de betreffende naam niet bestaat en stopt de macro.
Is er een manier om alle bladen met één druk op de knop te verwijderen? Let wel, er bestaat ook een ander blad met een naam met daarin het woord "week", die moet echter wél blijven...

Voorbeeldje (heel beknopt):
Bekijk bijlage Voorbeeld weektabbladen.xlsb

Bij voorbaat weer dank voor alle hulp!
 
Gebruik deze:
Code:
Sub Tabs_wissen()
    Dim i as Integer
    On Local Error Resume Next
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        For i = 1 To 52
            Sheets("Week " & i).Delete
        Next i
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
    On Local Error GoTo 0
End Sub

In diezelfde actie zou je na de Delete ook weer een nieuw blad kunnen maken zodat je ineens 52 lege bladen met de juiste naam hebt. Dan zou je dit kunnen doen in plaats van wat hier boven staat.
Code:
Sub Tabs_wissen()
    Dim i as Integer
    On Local Error Resume Next
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        For i = 1 To 52
            Sheets("Week " & i).Delete
        Next i
        
        For i = 1 To 52
            Worksheets.Add After:=Worksheets(Worksheets.Count), Count:=1
            ActiveSheet.Name = "Week " & i
        Next i
        
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
    On Local Error GoTo 0
End Sub
 
edmoor:

Wederom heb je mij enorm geholpen!

Het toevoegen van nieuwe, lege bladen is niet nodig, dat wordt op een andere manier geregeld. Het ging me puur om het wissen.

Ander vraagje: de code
Code:
.Screenupdating
voorkomt het knipperen van het bestand bij alle gebeurtenissen tussen "False" en "True", toch? Moet dat altijd in een "With" of kan ik dat ook bij andere functies zo toepassen?
 
Dat kan je ook zonder With toepassen:
Application.ScreenUpdating = False
 
Niet vergeten het op het juiste moment ook weer op True te zetten ;)
Application.ScreenUpdating = True

Ook een fijne avond gewenst :)
 
Dat kan je vooral ook zonder macro oplossen...
Activeer de eerste sheet en klik dan met shift ingedrukt de laatste sheet aan. Alle te verwijderen sheets zijn nu geselecteerd. Rechtsklik op 1 van die geselecteerde tabs en kies in het menu voor delete... Klaar ben je...
 
Dat kan je vooral ook zonder macro oplossen...
Activeer de eerste sheet en klik dan met shift ingedrukt de laatste sheet aan. Alle te verwijderen sheets zijn nu geselecteerd. Rechtsklik op 1 van die geselecteerde tabs en kies in het menu voor delete... Klaar ben je...

Daar heb je helemaal gelijk in, Ginger. Echter is die manier niet "idiotproof". Mocht er om wat voor reden dan ook een blad bijkomen die niet op de juiste plek staat bestaat een groot risico dat die ook wordt meegeselecteerd en dus gewist. Bovendien heb ik het wissen gecombineerd met een aantal andere zaken zoals het opschonen van de blijvende bladen etc, waardoor er echt een "1-click" oplossing is nu. Erg handig voor mezelf, maar vooral ook wanneer iemand anders het moet doen. Mijn ervaringen met andere gebruikers is dat men vooral heel veel verkeerd weet te doen, zeker als er meer handelingen moeten gebeuren. Waar mogelijk, wil ik dat dus voorkomen!

Alsnog wel bedankt voor je reactie, het had zomaar wél een simpelere oplossing kunnen zijn ;)
 
Als je het nog meer 'proof' wil maken kan je deze gebruiken. Alle tabjes die beginnen met "Week", "WEek" etc worden verwijderd.
Code:
Sub Tabs_wissen()
With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
    For Each sh In Sheets
        If LCase(Left(sh.Name, 4)) = "week" Then sh.Delete
    Next sh
    .DisplayAlerts = True
End With
End Sub
 
Kijk uit met 'weekend'. :d
 
Je bent me net voor ;)
Ik zou dan inderdaad dit gebruiken:
If LCase(Left(sh.Name, 5)) = "week "
 
Omdat het weekend is

If not sh.name = ........... Or of array constucties mogen naar hartenlust toegepast worden.:d
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan