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

Benoemd bereik verwijderen als het werkblad met het bereik is verwijderd (VBA 2010)

Status
Niet open voor verdere reacties.

ErikdV

Gebruiker
Lid geworden
16 jun 2011
Berichten
81
Ik heb een werkmap met meerdere werkbladen.
Op elk werkblad heb ik diverse bereiken benoemd (namen definieren).
Als ik de structuur van mijn werkmap wijzig door werkbladen te verwijderen of een andere naam te geven verwijzen de namen naar een niet bestaand bereik.
Het staat in de namenlijst met de waarde =#VERW! en de verwijzing =#VERW!#VERW!

Ik wil deze namen verwijderen en heb daarvoor onderstaande VBA-code gemaakt.

Sub lijstnamen()
Dim nms
Dim wks
Dim r
Dim c
Set nms = ActiveWorkbook.Names
Set wks = Worksheets(4)
For r = 1 To nms.Count
c = nms(r).RefersToRange.Value
If c = "#VERW!" Then nms(r).Delete
Next
End Sub

Waarschijnlijk wordt "#VERW" niet gezien als waarde.
Hoe los ik dit op?
Overigens werkt het ook niet met "#HREF"
 
En deze?
Code:
Sub lijstnamen()
 Dim nms
 Dim wks
 Dim r
 Dim c
 Set nms = ActiveWorkbook.Names
 Set wks = Worksheets(1)
 For r = 1 To nms.Count
 If Not Error = 0 Then
 nms(r).Delete
 End If
 Next
 End Sub
 
Cobbe, Ik heb je macro uitgeprobeerd, maar hij werkt niet goed.

Ik heb op 3 cellen voor iedere cel een aparte naam gedefinieerd met alle gegevens ingevuld.
In eerste instantie komt VBA met een foutmelding. Als ik de uitvoering dan beeindig en in de namenlijst kijk zie ik dat de 1e en de 3e naam zijn verwijderd.
Als ik de macro nog een keer uitvoer wordt ook de 2e naam verwijderd.

Ik heb dus geen enkele naam meer over, terwijl ze toch allemaal valide waren.
Het lijkt erop dat "error = 0" niets doet.
 
This should do the trick:
Code:
Sub Spaarie()
    For Each n In ThisWorkbook.Names
        If InStr(1, n.RefersTo, "#REF") > 0 Then n.Delete
    Next
End Sub

p.s: Wanneer je gaat deleten zou ik jouw 'For' event anders inrichten
I.p.v:
Code:
For r = 1 To nms.Count
Als je nummer 1 nu verwijdert, dan wordt nummer 2 > nummer 1. Dus dan sla je er 1 over, want r wordt 2
Om dit te voorkomen zou ik het volgende doen:
Code:
For r = nms.count to 1 step -1
Nu ga je i.p.v. boven naar beneden > beneden naar boven en sla je er nooit 1 over...
 
Laatst bewerkt:
Bedankt Spaarie,

Ik was er inmiddels al achter dat ik naar de "RefersTo" moest kijken.
Het werkt als een trein.
Nu nog kijken of ik iets dergelijks kan maken voor verwijzingen naar een verkeerd tabblad...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan