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

Naam tabblad met een VBA veranderen

Status
Niet open voor verdere reacties.

Jurgen2807

Gebruiker
Lid geworden
27 jul 2011
Berichten
189
Hallo,

Als ik op een werkblad de inhoud van een cel verander, bijvoorbeeld D2, dan zou ik graag zien dat de naam van het tabblad automatisch wordt veranderd in de waarde van cel D2. Hoe doe ik dit? Er zijn voorbeelden te vinden, maar daar zitten ook andere criteria aan vast.

Bijgaand een voorbeeldbestandje

Graag jullie hulp
 

Bijlagen

Bv.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address(0, 0) = "D2" And Target <> "" And Target.Count = 1 Then Me.Name = Target
End Sub
 
Hou er daarbij rekening mee dat de naam van een werkblad maximaal 31 posities lang mag zijn en niet de volgende tekens mag bevatten:
Code:
\  /  ?  *  [ ]

Ik zou het dus zo doen:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Address(0, 0) = "D2" And Target <> "" And Target.Count = 1 Then
        ActiveSheet.Name = GoedeNaam(Target.Value)
        Target.Value = ActiveSheet.Name
    End If
    Application.EnableEvents = True
End Sub

Function GoedeNaam(st As String) As String
    Dim Fout() As String
    Dim i As Byte
    
    Fout = Split("\,/,?,*,[,]", ",")
    For i = 0 To 5
        st = Replace(st, Fout(i), vbNullString)
    Next i
    
    GoedeNaam = Left(st, 31)
End Function
 
Laatst bewerkt:
De code werkt perfect in het voorbeeld wat ik heb toegevoegd.

In mijn eigen prognosemodel werkt deze op 1 tabblad. De overige niet. De fout zit in het deel:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "D2" And Target <> "" And Target.Count = 1 Then Me.Name = Target
End Sub

Wat kan daarvan de reden zijn?
 
Heb net m'n post in #3 aangepast.
 
Zou Me veranderd in Activesheet wat uithalen denk je?
 
Dag Ed,

Kan ik je prive mijn bestandje ff mailen? Ik denk dat er een fout in mijn prognosemodel zit. Ik krijg hem niet werkend op tabbladen 1 tm 20. Wel op totaal. Ik heb de hele code van tabblad TOTAAL ook al gekopieerd naar 1, maar dat werkt ook niet.
 
Zet die coderegel in Thisworkbook tussen.
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)


End Sub
 
Wat HSV zegt :)
Wijzig dan wel ActiveSheet.Name in sh.Name
 
Laatst bewerkt:
klein beetje aangepast.
Code:
If Target.Address(0, 0) = "D2" And Target.Value <> "" And Target.Count = 1 Then Sh.Name = Target
En dan moet je eigenlijk nog controleren of het blad nog niet bestaat.
 
Die laatste van HSV is een goeie.
Die controle kan je dan in de functie GoedeNaam opnemen.
 
Onderstaande code plak ik in Thisworkbook toch?

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address(0, 0) = "D2" And Target.Value <> "" And Target.Count = 1 Then Sh.Name = Target
End Sub
 
Zonder alle juiste controles zou dat voldoende moeten zijn. Toch zou ik het dan zo doen:
Code:
Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)
    Dim Bladnaam As String
    Application.EnableEvents = False
    If Target.Address(0, 0) = "D2" And Target <> "" And Target.Count = 1 Then
        Bladnaam = GoedeNaam(Target.Value)
        If Bladnaam <> "" Then
            ActiveSheet.Name = Bladnaam
            Target.Value = sh.Name
        Else
            MsgBox "Incorrecte bladnaam"
        End If
    End If
    Application.EnableEvents = True
End Sub

Function GoedeNaam(st As String) As String
    Dim Fout() As String
    Dim i As Integer
    Dim sh As Object
    
    Fout = Split("\,/,?,*,[,]", ",")
    For i = 0 To 5
        st = Replace(st, Fout(i), vbNullString)
    Next i
    
    For Each sh In ActiveWorkbook.Sheets
        If sh.Name = st Then
            st = ""
        End If
    Next sh
    GoedeNaam = Left(st, 31)
End Function
 
De code in Thisworkbook.
Uiteraard een mooie code van @edmoor, maar daarmee controleer je volgens mij niet of de naam al bestaat.
Misschien kan Ed deze regel er in opnemen.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Address(0, 0) = "D2" And Target.Value <> "" And Target.Count = 1 Then
 Application.EnableEvents = False
   If Not IsError(Evaluate("'" & Target.Value & "'!A1")) Then
       Target.ClearContents
       MsgBox "bladnaam bestaat al"
   Else
       Sh.Name = Target
   End If
 Application.EnableEvents = True
End If
End Sub
 
Geheid zal ik iets fout doen, maar het werkt bij mij niet. Als ik de code van Ed in Thisworkbook plak, dan veranderd geen enkele naam.

Kijkt jullie code naar ieder tabblad cel D2?
 
@HSV:
Die controle zit in de functie GoedeNaam.
 
Is D2 bij jou toevallig een samengevoegde (Merged) cel?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan