Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Zellnamen überprüfen

Forumthread: VBA Zellnamen überprüfen

VBA Zellnamen überprüfen
Hilfesuchender
Hallo zusammen,
ich habe das Problem, dass ich überprüfen möchte, ob eine Zelle einen Namen hat oder nicht. Falls sie einen Namen hat, soll dieser gelöscht werden. Dies funktioniert auch ganz gut, solange die Zelle einen Namen hat, aber wenn alle Namen für eine Zelle gelöscht sind, wird ein Fehler ausgegeben. Der Fehler lautet: Laufzeitfehler 1004, Anwendungs- oder Objektorientierter Fehler. Das liegt meiner Meinung nach daran, dass sobald alle Namen gelöscht sind ich nicht mehr auf Cells(j,i).name zugreifen kann. Bisher habe ich das so gemacht:
For i = 4 To k
For j = 5 To l
Do While (Cells(j, i).name "")
Cells(j, i).name.Delete
Loop
Next
Next
Kann mir jemand bei diesem Problem helfen?
Vielen Dank im Voraus!
Beste Grüße
Anzeige
AW: Namen löschen mit Schmitti...
25.08.2009 10:44:09
Hilfesuchender
Hallo Matthias,
mit dieser Lösung werden aber alle Zellnamen im kompletten Workbook gelöscht. Dies sollte nicht der Fall sein. Es sollen nur die Zellnamen für die Zellen in einem bestimmten Bereich im aufgerufenen Sheet gelöscht werden. Deshalb auch die beiden For-Schleifen!
Gruß Tobias
Anzeige
AW: Namen löschen mit Schmitti...
25.08.2009 11:00:53
Matthias5
Hallo Tobias,
stimmt, dann so:
Sub Namen_im_Bereich_loeschen()
Dim nm As Name, Bereich As Range
Set Bereich = Range("C5:D9")
For Each nm In ThisWorkbook.Names
If Not Intersect(Range(nm.RefersTo), Bereich) Is Nothing Then nm.Delete
Next nm
End Sub
Gruß,
Matthias
Anzeige
AW: Namen löschen mit Schmitti...
25.08.2009 12:32:15
Hilfesuchender
Hallo Matthias,
hab das jetzt mal so probier umzusetzen:
Sub zellen()
Dim i As Long
Dim j As Long
Dim k As Long
Dim l As Long
k = Cells(4, Columns.Count).End(xlToLeft).Column
l = Cells(Rows.Count, 5).End(xlUp).Row
Dim nm As name, Bereich As Range
Set Bereich = Range(Cells(5, 4), Cells(l, k))
For Each nm In ThisWorkbook.Names
If Not Intersect(Range(nm.RefersTo), Bereich) Is Nothing Then nm.Delete
Next nm
End Sub

Funktioniert aber leider immer noch nicht. Kann es daranliegen, dass ich meinen ersten Bereich irgendwie falsch auswähle?
Danke!
Gruß,
Tobias
Anzeige
AW: Namen löschen mit Schmitti...
25.08.2009 12:58:57
Matthias5
Hallo Tobias,
welchen Wert haben l und k, wenn der Fehler kommt?
Wo hast du den Code stehen? So wie er vorliegt gehört er in das Klassenmodul des Tabellenblattes.
Gruß,
Matthias
AW: Namen löschen mit Schmitti...
25.08.2009 13:06:22
Hilfesuchender
Hallo Matthias,
l und k sind konstant. l ist 32 und k ist 9.
Der Code liegt in "DieseArbeitsmappe".
Gruß,
Tobias
Anzeige
AW: Namen löschen mit Schmitti...
25.08.2009 13:16:29
Matthias5
Hallo,
wenn der Code in "DiesArbeitsmappe" steht, musst du noch auf das Tabellenblatt referenzieren (hier das aktive Blatt):
Sub zellen()
Dim i As Long
Dim j As Long
Dim k As Long
Dim l As Long
With ActiveSheet
k = .Cells(4, Columns.Count).End(xlToLeft).Column
l = .Cells(Rows.Count, 5).End(xlUp).Row
Dim nm As Name, Bereich As Range
Set Bereich = .Range(.Cells(5, 4), .Cells(l, k))
For Each nm In ThisWorkbook.Names
If Not Intersect(.Range(nm.RefersTo), Bereich) Is Nothing Then nm.Delete
Next nm
End With
End Sub
Gruß,
Matthias
Anzeige
AW: Namen löschen mit Schmitti...
25.08.2009 15:31:38
tobi
das gibt leider immer noch den gleichen Fehler aus. Ich lade dir mal eine beispieldatei hoch, die allerdings gekürzt ist. ich würde dort in mappe eins gern alle namen löschen und die in mappe 2 sollen erhalten bleiben.
https://www.herber.de/bbs/user/64043.xls
danke.
Gruß Tobias
Anzeige
AW: Namen löschen mit Schmitti...
25.08.2009 16:32:40
Matthias5
Hi,
Sub zellen()
Dim i As Long
Dim j As Long
Dim k As Long
Dim l As Long
With Sheets("Tabelle1")
k = 9 '.Cells(4, Columns.Count).End(xlToLeft).Column
l = 32 '.Cells(Rows.Count, 5).End(xlUp).Row
Dim nm As Name, Bereich As Range
Set Bereich = .Range(.Cells(5, 4), .Cells(l, k))
For Each nm In ThisWorkbook.Names
rng = Replace(Mid(nm.RefersTo, InStr(nm.RefersTo, "!") + 1), "$", "")
ws = Mid(nm.RefersTo, 2, InStr(nm.RefersTo, "!") - 2)
If ws = "Tabelle1" Then
If Not Intersect(Sheets(ws).Range(rng), Bereich) Is Nothing Then nm.Delete
End If
Next nm
End With
End Sub
Gruß,
Matthias
Anzeige
AW: Namen löschen mit Schmitti...
25.08.2009 19:01:50
tobi
vielen dank! ich glaub das geht so!
Echt cool!
AW: Namen löschen mit Schmitti...
25.08.2009 13:03:03
Hilfesuchender
wenn das so ausgeführt wird, tritt der Fehler "Laufzeitfehler 1004, Anwendungs- oder Objektorientierter Fehler" wieder auf!
Vielen Dank für Antworten!
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige