• 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 naam aanpassen vanuit cel.

Status
Niet open voor verdere reacties.

marionet

Gebruiker
Lid geworden
19 nov 2010
Berichten
5
LS

De volgende code geeft de tekst van cel C3 als naam van het tabblad aan na invullen in C3 gevolgd door RETURN.

Const Cel As String = "C3"

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

  If Target.Address = Range(Cel).Address And Target <> "" Then
    If Sh.Name <> Target.Value Then Sh.Name = Target.Value
  End If

End Sub

Dit werkt.

Maar als een gebruiker die cel C3 wil leegmaken op de delete knop drukt, krijgt deze als melding te zien runtime error 13 type mismatch. Hoe kan ik er voor zorgen dat deze foutmelding niet naar boven komt en dat de cel gewoon leeg wordt gemaakt.
De worksheet is geprotect, slechts de gewenste cellen kunnen door de gebruiker ingevuld worden. Ik gebruik Excel 2010.

Kortom hoe kan ik de handling van de delete knop aanpassen. Ik kan geen oplossing vinden.:confused:
Bij voorbaat dank voor eventuele tips.
 
Laatst bewerkt door een moderator:
Mis ik iets? Deze code doet toch precies datgene dat je vraagt.

Code:
Const Cel As String = "C3"
 
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   If Target.Address = Range(Cel).Address And Target <> "" Then
      If Sh.Name <> Target.Value Then Sh.Name = Target.Value
   End If
 
End Sub

Of je hebt je blad verkeerd beveiligd.
 
Je hebt het tabbladnaam gekoppeld aan C3
Als je cel C3 leeg maakt dan krijgt het tabblad geen naam en dat kan niet
 
Reacties tot nu toe:
- klopt dat de code doet wat gevraagd wordt (staat ook in de vraagstelling aangegeven), alleen het reageren op het indrukken van de DELETE knop is ongewenst.
- een leeg veld geeft geen probleem, het tabblad krijgt dan geen naam.

Dus als ik iets invul in cel C3 return geef wordt de naam van het tabblad gewijzigd. Als ik vervolgens met backspace de inhoud leeg maak en return geef dan werkt het ook (tabblad zonder naam). Maar wanneer ik de DELETE knop gebruik dan komt de foutmelding naar boven.
 
De Delete-knop maakt hier enkel de cel leeg en de naam vh blad blijft de oorspronkelijke naam houden doordat deze regel dat verhindert:

Code:
If Target.Address = Range(Cel).Address And [COLOR="#FF0000"]Target <> ""[/COLOR] Then

Dus of je vraag is fout of je bedoelt iets anders.
 
het tabblad krijgt dan geen naam.
Volgens mij is dat nu juist het probleem
Een tabblad moet altijd een naam hebben.
Excel accepteert een tabblad zonder naam niet.
 
En als je
If Target.Address = Range(Cel).Address And Target <> ""
wijzigt in:
If Target.Address = Range(Cel).Address And Target.Value <> ""

Want Target is altijd gevuld en dat hoeft met Target.Value niet zo te zijn.
 
Laatst bewerkt:
De code loopt toch niet vast als je C3 leegmaakt via Backstage of via Delete.

Als ik niet mee ben laat me dan weten waar ik vastloop.
 

Bijlagen

Ik raad iedereen aan om het zelf eens te proberen. Ik zie nu reacties op dingen die niet gevraagd zijn.
1. maak een excel bestand met de code op het workbook
2. vul een naam in in cel C3 geef RETURN en zie dat de naam van het tabblad wijzigt in die naam.
3. ga terug naar de cel C3 en maak de cel leeg met behulp van de BACKSPACE knop tot er niets meer staat, geef weer RETURN en zie dat het tabblad dan ook geen naam heeft.
4. herhaal stap 2
5. ga terug naar de cel en druk op de DELETE knop.
6. op dit moment verschijnt er een errorcode zoals in de eerste posting aangegeven.

Vraag: het indrukken van de DELETE knop moet als resultaat hebben dat de cel leeg gemaakt word en dat er geen foutmelding verschijn. Hoe kan dat bereikt worden.
 
Het voorbeeld van Cobbe werkt goed, dus wel degelijk ook geprobeerd.
Ik heb ook Office 2010.
 
ga terug naar de cel C3 en maak de cel leeg met behulp van de BACKSPACE knop tot er niets meer staat, geef weer RETURN en zie dat het tabblad dan ook geen naam heeft.

Dat kan niet gebeuren als je de code gebruikt die je in de eerste post liet zien.
Ik vermoed dat je ook nog code hebt lopen achter een blad.
 
Laatst bewerkt:
Ik raad iedereen aan om het zelf eens te proberen. Ik zie nu reacties op dingen die niet gevraagd zijn.
1. maak een excel bestand met de code op het workbook

Lekker logisch, de omgekeerde wereld lijkt me, wie geholpen wil worden zorgt zelf voor een bestand met het probleem, en niet andersom.
 
De code van Cobbe werkt perfect, zelfs als je alle stappen volgt die jij ons aanraadt te volgen.
Zoals HSV al aangaf, post jij ons maar eens een voorbeeldbestandje dat het tegendeel bewijst.
 
Ok, dan treedt het bij mij ook op.
Vreemd want ik zie niet direct een verschil, maar maak er eens dit van:

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Address = Range(Cel).Address And Target.Text <> "" Then
        If Sh.Name <> Target.Value Then Sh.Name = Target.Value
    End If
End Sub

In het If statement heb ik dus Target.Value gewijzigd in Target.Text
Dan zijn de vergelijkingstypen gelijk.
 
Laatst bewerkt:
Ik ben blij dat het bij jou ook gebeurde, begon al een beetje aan me zelf te twijfelen.
Door Target.Value te veranderen in Target.Text doet het zich niet meer voor.

Vraag me wel af waarom het bij anderen wel werkte met Target en Target.Value.

Bedankt probleem opgelost.
 
Het werkte bij mij ook goed, alleen niet in jouw voorbeelddocument.
Waarom weet ik ook niet, maar het werkt nu dus :)
 
De oorzaak lag bij de samengevoegde cellen C3 en D3. Daarom konden wij dat ook niet nabootsen zonder voorbeeldbestand.

Zoals zo vaak begint de miserie met samengevoegde cellen.

Code:
Option Explicit
Const Cel As String = "C3"
 
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   If Target.Address = Range(Cel).Address And Target.Address <> "" Then
      If Sh.Name <> Target.Value Then Sh.Name = Target.Value
   End If
 
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan