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

Automatisch tabbladen toevoegen aan een code

Status
Niet open voor verdere reacties.

Sfinxie

Gebruiker
Lid geworden
26 sep 2012
Berichten
48
Beste helpers,

Ik kan mijn vraag het beste uitleggen aan de hand van het voorbeeldbestand.
Op tabblad 1, basisblad maandag, kan ik diverse zaken instellen, zoals datum etc.
Druk ik vervolgens op de kopieer-knop ('Toepassen') dan worden deze wijzigingen doorgevoerd naar de overige tabbladen, 1500 t/m 1502.
Tabblad 1503 is er later bij gekomen en dat is direct mijn probleem.
Hoe kan ik er voor zorgen dat deze automatisch mee wordt genomen in de kopieer-aktie?
 

Bijlagen

Misschien gewoon een for next aan toevoegen. Tegelijkertijd heb je ook geen gedoe meer met namen die verkeerd kunnen zijn. Ik ga ervan uit dat de code voor de rest juist is, die heb ik niet gecheckt.
Code:
    For intwerkblad = 2 To Worksheets.Count
    
        Range("J1").Select
        Selection.Copy
        
'        Sheets(Array("Route 1500 maandag ", "Route 1501 maandag", "Route 1502 maandag")). _
'            Select
        Sheets(intwerkblad).Select

'        Sheets("Route 1500 maandag ").Activate
        
        
        Range("G1").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Sheets("Basisblad Maandag").Select
        Range("D7:AI8").Select
        Application.CutCopyMode = False
        Selection.Copy
        
'        Sheets(Array("Route 1500 maandag ", "Route 1501 maandag", "Route 1502 maandag")). _
'            Select
        Sheets(intwerkblad).Select

'        Sheets("Route 1500 maandag ").Activate
        
        
        Range("J26").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Sheets("Basisblad Maandag").Select
        Range("D9:AI9").Select
        Application.CutCopyMode = False
        Selection.Copy
        
'        Sheets(Array("Route 1500 maandag ", "Route 1501 maandag", "Route 1502 maandag")). _
'            Select
        Sheets(intwerkblad).Select

'        Sheets("Route 1500 maandag ").Activate
        
        
        Range("J28").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("J29").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("J30").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("J31").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("J32").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("J33").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("J34").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("J35").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("H24").Select
        Sheets("Basisblad Maandag").Select
        Range("H14").Select
        Application.CutCopyMode = False

    Next
Beste groeten,
Paul.
 
Dat is inderdaad een goede oplossing, waarvoor mijn hartelijke dank.
Dat brengt mij overigens wel op een tweede vraag.
Het setje tabbladen zoals in bijgevoegd voorbeeld bevat gegevens voor de 'maandag'.
In het originele bestand waarin ik dit toe wil passen bestaan echter ook setjes voor de andere dagen van de week. Ieder met een eigen "Basisblad [weekdag]".
Wat ik graag zou zien is dat wanneer ik wijzigingen aanbreng op 'basisblad maandag' die wijzigingen worden doorgevoerd op alle tabbladen waarin de naam 'maandag' voorkomt en niet op de andere tabbladen. Zo ook voor de andere dagen van de week.
Ter verduidelijking heb ik nogmaals een voorbeeld bijgevoegd, nu met 2 extra tabbladen voor de dinsdag.
Met de door u gegeven code worden via het 'basisblad Maandag' ook de "dinsdag-bladen" gewijzigd.
Dat zou ik graag anders zien. Dus de wijzigingen op 'basisblad maandag' zijn alleen voor alle "maandag bladen", op 'basisblad dinsdag' voor alle "dinsdagbladen" enz.
 

Bijlagen

Volgens mij doet dit hetzelfde als je hele macro,
vermijdt select in een macro.

Code:
Sub Maandag()

For intwerkblad = 2 To Worksheets.Count

 With Sheets(intwerkblad)
      .Range("G1").Value = Sheets("Basisblad Maandag").Range("J1").Value
        .Range("J26:aO27").Value = Sheets("Basisblad Maandag").Range("D7:AI8").Value
        .Range("J28:aO35").Value = Sheets("Basisblad Maandag").Range("D9:AI9").Value
End With
        Next
End Sub

Niels
 
Wauw! Inderdaad veel mooier en sneller.
Ik moet bekennen dat mijn kennis van VBA vrijwel nihil is. Ik ben gekomen tot wat ik nu had door simpelweg een macro op te nemen, alle handelingen te verrichten die nodig waren en vervolgens de opname weer te stoppen. Zo is mijn oorspronkelijke code ontstaan.
Er zit aan bovenstaande code nog wel een nadeel. De informatie van 'basisblad Maandag' wordt ook gekopieerd naar 'basisblad Dinsdag' en dat is niet de bedoeling.
Verder zou ik graag zien dat iedere dag apart blijft, zoals ik hierboven al uitlegde.
Nogmaals, mijn kennis van VBA is niet zodanig dat ik dit zelf uit kan vinden.
 
Aan deze macro zou je genoeg moeten hebben voor alle dagen.

Code:
Sub Alledagen()
dag = Right(ActiveSheet.Name, Len(ActiveSheet.Name) - 10)
For intwerkblad = 2 To Worksheets.Count
If InStr(Sheets(intwerkblad).Name, dag) > 0 Then
 With Sheets(intwerkblad)
      .Range("G1").Value = Sheets("Basisblad Maandag").Range("J1").Value
        .Range("J26:aO27").Value = Sheets("Basisblad Maandag").Range("D7:AI8").Value
        .Range("J28:aO35").Value = Sheets("Basisblad Maandag").Range("D9:AI9").Value
End With
End If
        Next
End Sub

Niels
 
Nee helaas. Die code krijg ik niet aan de praat.
Melding: De macro Helpmij.xlsm!Maandag kan niet worden uitgevoerd. De macro is wellicht niet beschikbaar in dit werkblad of alle macro's zijn mogelijk uitgeschakeld.
 
Kijk eens naar de naam van de macro en dan wat je melding weergeeft.

Niels
 
Aha, oke, die namen kwamen niet (meer) overeen. Dat heb ik hersteld, krijg nu ook geen melding meer, maar er gebeurt ook niks meer. Eventuele wijzigingen die ik aanbreng op het basisblad worden, na 'Toepassen', niet overgezet naar de tabbladen.
 
zo dan:

Code:
Sub Alledagen()
dag = Right(UCase(ActiveSheet.Name), Len(ActiveSheet.Name) - 10)
For intwerkblad = 2 To Worksheets.Count
If InStr(UCase(Sheets(intwerkblad).Name), dag) > 0 Then
 With Sheets(intwerkblad)
      .Range("G1").Value = Sheets("Basisblad " & dag).Range("J1").Value
        .Range("J26:aO27").Value = Sheets("Basisblad " & dag).Range("D7:AI8").Value
        .Range("J28:aO35").Value = Sheets("Basisblad " & dag).Range("D9:AI9").Value
End With
End If
        Next
End Sub


Kwam omdat je niet consequent bent met hoofdletter gebruik in je tabblad namen, hoeft nu ook niet meer.

Niels
 
Ik ben vandaag niet meer in de gelegenheid om het te proberen, excuus.
Morgen weer een dag en in ieder geval nu alvast bedankt voor alle moeite.
 
Geweldig! Dit werkt helemaal zoals ik het graag wil. Hartelijk dank voor de fantastische hulp!
Wellicht een klein schoonheidsfoutje: Op de tabbladen 'basisblad Dinsdag' en (de inmiddels door mij zelf bijgemaakte 'basisblad Woensdag') zelf verschijnen ook alle te kopieren gegevens in de range J26:AO35. Op 'basisblad Maandag' gebeurt dat niet. Het zelfde geldt voor de inhoud van cel J1, die wordt naar cel G1 gekopieerd op het basisblad zelf. Ook hier op 'basisblad Maandag' niet. Is daar nog iets aan te doen?
Ik kan het eventueel "wegwerken" door op die bladen en die ranges voor een witte tekst te kiezen, maar dat verdient natuurlijk geen schoonheidprijs.;-)

Een laatste vraag: In hoeverre zijn de tabbladnamen van belang? MOET daar een dagnaam op staan? (ik gok van wel)
 
For intwerkblad = 2 to......
Geeft aan dat hij van af blad 2 moet beginnen met doorvoeren van gegevens, verander dit in bv 4 dan worden basisblad dinsdag en woensdag niet meegenomen, als je deze tenminste vooraan in je bestand hebt staan.

De dag moet niet in de tabbladnaam staan maar dan ben je weer terug bij af en zul je weer voor elke dag een aparte macro moeten maken.

Niels
 
Het is me helemaal duidelijk. Het klinkt logisch en dat is het natuurlijk ook. Je moet het alleen wel even weten allemaal.
Enorm bedankt voor alle hulp, ik ga het topic als opgelost markeren!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan