Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1284to1288
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Laafzeitfehler '424'

Laafzeitfehler '424'
05.11.2012 22:56:31
mknelles
Liebe Leute,
ich bekomme bei dem nachfolgenden Code immer die Fehlermeldung >Laufzeitfehler '423" Objekt erforderlich". Hat jemand eine Idee? Ich bin mit meinem LAtein am Ende.
Gruß Markus
Sub ZellnamenLöschen1()
'löscht alle Zellnamen mit ungültigem Bezug
Dim Zellnamen ' As Object
Dim r ' As Long
Set Zellnamen = ActiveWorkbook.Names
For r = Zellnamen.Count To 1 Step -1
If InStr(Zellnamen(r), "#REF")  0 Then
Zellnamen(Zellnamen(r).Name).Name.Delete
End If
Next
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Klar, so geht das ja auch nicht, ...
05.11.2012 23:24:12
Luc:-?
…Markus;
1. ist #REF! kein Text, sondern ein Fehlerwert – das Weglassen des ! nutzt dir da gar nichts.
2. ist Value nicht die Standard-Default-Eigenschaft von Names.
3. muss man Value entweder evaluieren (besonders bei benannten Fmln) oder hier überprüfen, ob ein Fehlerwert vorliegt. Letzteres wie folgt:
If IsError(Zellnamen(r).Value) Then oder ggf auch…
If Zellnamen(r).RefersTo = CVErr(xlErrRef) Then bzw generell RefersTo bzw Value.
Außerdem ist Zellnamen(Zellnamen(r).Name).Name.Delete auch falsch, denn mit Zellnamen(r) hast du ja ggf schon das gesuchte Item aus der Names-ObjektAuflistung. Was soll da noch das ganze Brimborium, zumal du mit der Eigenschaft Name hier jedesmal einen Text, nämlich die Bezeichnung des Namens erhältst?! Das ist dann auch kein Objekt, folglich gibt's dazu auch keine Delete-Methode und du wirst mit dieser F-Meldung konfrontiert.
Gruß Luc :-?

Anzeige
so klar?
05.11.2012 23:51:07
Erich
Hi Luc,
kleine Korrekturen:
1. #REF! ist hier Text - ein Teilstring des Formelstrings RefersTo.
2. "ist Value nicht die Standard-Default-Eigenschaft von Names" stimmt, ist aber ohnehin nicht sinnvoll.
Names ist nur eine Auflistung.
Wenn, dann könnte Value die Default-Eigenschaft von Name sein, nicht von Names.
Ist aber nicht. Default-Eigenschaft des Name-Objekts ist RefersTo.
Markus sagt hier nichts zu "Value".
3. muss man nicht - siehe meine Codes im anderen Beitrag.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Richtig und Return,
09.11.2012 02:50:16
Luc:-?
…Erich,
Der von mir in Pktt gefasste Teil steht zuerst im Pgm und fiel mir folgl gleich ins Auge; entscheidend ist aber wohl, was unter Außerdem steht und das hast du sinngemäß in deinem Beitrag auch geschrieben, wenn auch etwas „verwundert-unentschlossener“. ;-)
Zu 1. hast du natürl recht, sonst könnte das ja auch nicht evaluiert wdn, nur habe ich idR keine FWertTexte in Namen, die ich per VBA bearbeiten wollte, was wohl in 1.Linie eine Frage der Arbeitsorganisation ist.
Zu 2. liegst du informell auch richtig – hätte deutlicher Names(n) schreiben sollen, denn ein einzelnes Auflistungsmember hat diese Eigenschaft, und das war gemeint, nicht unbedingt Name wie du schreibst, denn das kommt in dieser Bedeutung nur als Objekt(Modell)Typ, nicht als vbKeyWord vor. Nehme an, dass du das auch so meinst.
Zu 3. analog 1., aber bei benannten Fmln kommt man nicht ums Evaluieren herum und damit habe ich es idR zu tun. Ein Zellbezug wäre strenggenommen zwar auch eine benannte Fml (=!), ist aber wohl die trivialste Form und wie benannte Konstanten auch anders auswertbar wie ich natürl auch weiß, aber hier versäumt habe zu reflektieren (zu FWerten vgl Anmerkung zu 1.). ;-)
Gruß Luc :-?

Anzeige
AW: Laafzeitfehler '424'
05.11.2012 23:39:56
Erich
Hi,
probier mal

Option Explicit
Sub ZellnamenLöschen2()    'löscht alle Zellnamen mit ungültigem Bezug
Dim Zellnamen As Names
Dim r As Long
Set Zellnamen = ActiveWorkbook.Names
For r = Zellnamen.Count To 1 Step -1
If InStr(Zellnamen(r), "#REF") Then Zellnamen(r).Delete
'     If InStr(Zellnamen(r).RefersTo, "#REF") Then Zellnamen(r).Delete
'     If InStr(Zellnamen(r), "#REF") Then ActiveWorkbook.Names(Zellnamen(r).Name).Delete
Next
End Sub
Sub ZellnamenLöschen3()    'löscht alle Zellnamen mit ungültigem Bezug
Dim xName As Name
For Each xName In ActiveWorkbook.Names
If InStr(xName, "#REF") Then xName.Delete
'     If InStr(xName.RefersTo, "#REF") Then xName.Delete
Next
End Sub
Deine Löschzeile verstehe ich nicht wirklich. Nehmen wir mal an, du hast einen Namen definiert
mit Namen "myBereich" und der Name steht in der Liste der Namern an 3. Stelle. Dann ist

Zellnamen(   Zellnamen(3)   .Name).Name
Zellnamen(Names("myBereich").Name).Name
Zellnamen(      "myBereich")      .Name
Names("myBereich")        .Name
"myBereich"
"myBereich" ist kein Name, sondern ein String, dafür gibt es kein Delete.
Eine Delete-Methode braucht ein Objekt - das sagt die Fehlermeldung aus.
ActiveWorkbook.Names(Zellnamen(r).Name) ist ziemlich sinnlos, weil gleich
ActiveWorkbook.Names(r)
Wie ein Name heißt, interessiert dich eigentlich gar nicht. Wichtig ist nur, ob im RefersTo-String (Formel) ein #REF vorkommt.
Wenn ja, wird der Name gelöscht, egal, wie er heißt. Das zeigt ZellnamenLöschen3().
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Laafzeitfehler '424'
06.11.2012 00:16:45
Gerd
Hallo,
übertreibt es mal nicht (vba - bescheiden war angegeben.)
Sub Bezugfehler()
Dim n As Name
For Each n In ActiveWorkbook.Names
If n.RefersTo Like "*REF!*" Then
n.Delete
End If
Next
End Sub
Gruß Gerd

AW: Laufzeitfehler '424'
06.11.2012 08:37:10
Markus
Liebe Kollegen,
vielen Dank für die zahlreichen Antworten. Ich denke da komme ich mit zurecht, sonst muss ich mich noch einmal melden.
Gruß Markus

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige