Namen tabbladen verzamelen op 1 tabblad

Status
Niet open voor verdere reacties.

Zeeuwjer

Gebruiker
Lid geworden
16 sep 2021
Berichten
25
Ik weet dat er al veel is geschreven over dit onderwerp maar wat ik wil krijg ik mbv de oude oplossingen niet voor elkaar (zal wel meer aan mij liggen dan aan de oplossingen).
In een excel bestand heb ik meerdere tabbladen zitten, de namen van de tabbladen wil ik verzamelen op een bepaalde sheet (naam = TODS), dit is de derde sheet. Als ik een tabblad toevoeg wil ik het script opnieuw laten draaien (kan handmatig).
Met onderstaande code heb ik dit voor elkaar, echter het script moet pas vanaf het 4de tabblad de namen ophalen.
Daarnaast zo het mooi zijn als de namen van de sheets ook gelijk een hyperlink met verwijzing naar het tabblad worden.

Wie kan mij helpen om de code aan te passen?

Alvast bedankt, Jeroen

Sub TODS_overzicht()
Dim f As Range, sh
With Sheets("hoofd")
For Each sh In Sheets
Set f = .Columns(2).Find(sh.Name)
If f Is Nothing Then .Cells(Rows.Count, 2).End(xlUp).Offset(1) = sh.Name
Next sh
End With
End Sub
 
Zonder voorbeeld document waarschijnlijk met:
Code:
Sub TODS_overzicht()
    Dim f As Range, sh
    With Sheets("hoofd")
        For Each sh In Sheets
            If sh.Index > 4 Then
                Set f = .Columns(2).Find(sh.Name)
                If f Is Nothing Then .Cells(Rows.Count, 2).End(xlUp).Offset(1) = sh.Name
            End If
        Next sh
    End With
End Sub
 
iets gaat er niet goed, vanochtend had ik de code werkend, daarna niet meer. Ook als ik jouw code toepas gebeurt er niks meer.
Ik heb het bestand bijgevoegd, wil je er even naar kijken?

bvd
 

Bijlagen

Het gebruik van .Index was een gok vanwege het ontbreken van een voorbeeld document.
In het document dat je nu hebt geplaatst heeft het gebruik van .Index geen nut.
Controleer daarom op de tabnamen in plaats van de index.
Code:
Sub TODS_overzicht()
    Dim f As Range, sh
    With Sheets("hoofd")
        For Each sh In Sheets
            Select Case sh.Name
                Case "Index", "Hoofd", "tab1", "tab2"
                Case Else
                Set f = .Columns(2).Find(sh.Name)
                If f Is Nothing Then .Cells(Rows.Count, 2).End(xlUp).Offset(1) = sh.Name
            End Select
        Next sh
    End With
End Sub
 
Laatst bewerkt:
Bijna gelukt, kan je nog invoegen dat hij vanaf sheet 3 gaat kijken.

bvd jeroen
 
De code lijkt me simpel genoeg dat je dat zelf van doen.
 
Achter Case staan de tabbladen die uitgesloten zijn.
Daar hoef je er dan alleen maar 1 weg te halen of toe te voegen.
 
Laatst bewerkt:
Top zo, dank je wel, nog 1 vraag extra, in kolom c wil ik achter de naam van het tabblad nog een naam uit een cel van het specifieke tabblad opnemen. Zou je dit nog willen toevoegen aan de code?
mijn dank is groot.
 
De meeste mensen weten het niet, maar ieder werkblad bevat hyperlinks naar alle werkbladen als je linksonder op de werkblad navigatieknoppen op de rechtermuisknop klikt: altijd actueel, zonder enige code.
 

Bijlagen

  • __sheet selector.PNG
    __sheet selector.PNG
    9,3 KB · Weergaven: 27
Laatst bewerkt:
Ik ken deze oplossing, ik wil het echter voor de verschillende gebruikers zo vriendelijk maken dat ze vanuit het blad zelf kunnen doorklikken naar het betreffende tabblad, het bestand bevat >30 tabbladen.
Iemand die mij kan helpen?
 
Wat is er vriendelijker dan dat iedere gebruiker vanuit ieder werkblad met 1 rechtermuisknop en 1 linkermuisknop terecht komt waar hij/zij wil ?
 
Wie kan/wil mij nog even verder helpen, aan de code van Edmoor wil ik graag toevoegen dat hij naast het verzamelen van de tabbladnamen ook een waarde uit een bepaalde cel ophaalt en deze in de kolom naast de tabbladnaam zet.
Ik heb lopen zoeken in diverse topics om dit voor elkaar te krijgen maar kon niks vinden.
Alvast bedankt voor de moeite, grt Jeroen
 
Uit welke cel?
 
Uit cel C7 van welk tabblad?

Code:
Sub TODS_overzicht()
    Dim f As Range, sh
    With Sheets("hoofd")
        For Each sh In Sheets
            Select Case sh.Name
                Case "Index", "Hoofd", "tab 1", "tab 2"
                Case Else
                Debug.Print sh.Name
                Set f = .Columns(2).Find(sh.Name)
[COLOR="#FF0000"]                If f Is Nothing Then
                    .Cells(Rows.Count, 2).End(xlUp).Offset(1) = sh.Name
                    .Cells(Rows.Count, 3).End(xlUp).Offset(1) = Sheets(sh.Name).Range("C7")
                End If[/COLOR]
            End Select
        Next sh
    End With
End Sub
 
Laatst bewerkt:
Sheets(sh.Name).Range("C7")

of

sh.Range("C7")
 
Is inderdaad netter, als TS dat tabblad bedoelt :)
 
Bedankt voor jullie reactie, echter het werkt niet, ik krijg wel het overzicht van de tabbladnemen in de 2de kolom van het overzichtstabblad (wat al werkte) maar de waarde uit cel C7 van elk tabblad komt niet in kolom C van het overzichtstabblad.
Hebben jullie nog een oplossing?

Ik heb het bestand toegevoegd (grotendeels leeggemaakt ivm pers. gegevens).

bvd, Jeroen
 

Bijlagen

Dat werkt wel, maar in het blad TODS staat na regel 70 al veel ingevuld in kolom C.
Maak dat dus eerst helemaal leeg.

Of maak er dit van:
Code:
Sub TODS_overzicht()
    With Sheets("tods")
        For Each sh In Sheets
            Select Case sh.Name
                Case "INVOER", "VRAGEN", "TODS", "Origineel tab", "Leveranciers", "Inhoud map WVB", "Inhoud map projectleider", "Ordnerruggen", "WORD"
                Case Else
                Debug.Print sh.Name
                Set f = .Columns(2).Find(sh.Name)
                If f Is Nothing Then
                    regel = .Cells(Rows.Count, 2).End(xlUp).Offset(1).Row
                    .Cells(regel, 2) = sh.Name
                    .Cells(regel, 3) = sh.Range("C7")
                End If
            End Select
        Next sh
    End With
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan