Clever-Excel-Forum

Normale Version: Application.Names Namenobjekt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Abend allerseits,
Innerhalb eines Makros möchte ich ein Namens-Objekt nach Kriterien in einer Funktion X suchen und als Funktionsergebnis zurückgeben. Die aufrufende Sub Y soll das Ergebnis-Objekt weiterverarbeiten.
Beide Prozeduren vereinfacht dargestellt:
Sub Y
   Dim oName As Name
   oName = X("MyName")      ===> Diese Zuweisung läuft auf Laufzeitfehler 424 Objekt erforderlich
   ' Bearbeitung oName (löschen oder andere Auswertungen)
End Sub
--------------
Function X(cName)
'  In Beispiel wird davon ausgegangen, dass das gesuchte Objekt auf jeden Fall existiert.
  Dim oName As Name
  For Each oName In Application.Names
      If oName.Name = cName Then
         Exit For
      End If
  Next
   X = oName     ===> Nach dieser Zuweisung wird im Lokalfenster für X die Eigenschaft Variant/String angezeigt 
                                   Ich hätte hier ein Objekt erwartet
End Function
--------------
Problem: Wie bekomme ich in Sub Y das Name-Objekt? Ist mein Ansatz hier falsch?

Vielen Dank für Eure Unterstützung!
Beste Grüße
Michael
Hallo Michael,

dafür braucht man keine extra Funktion. Wink

Code:
Sub Y()
  Dim oName As Name
  Set oName = Application.Names("MyName")
  'Bearbeitung oName (löschen oder andere Auswertungen)
  oName.Delete
End Sub
oder
Code:
Sub Y()
  With Application.Names("MyName")
    'Bearbeitung oName (löschen oder andere Auswertungen)
    .Delete
  End With
End Sub

Gruß Uwe
Reicht schon:

Code:
Sub M_snb()
  Application.Names("MyName").Delete
End Sub
Aber.... warum/wozu würde man eine 'Name' entfernen ?
Hallo zusammen und vielen Dank,
Ich habe ja alles nur vereinfacht dargestellt, dahinter steckt mehr.
So kann ich nicht immer vom Namen ausgehen, ich benötige auch die Suche über Refersto, die komplexe Suche ist in einer globalen Funktion ausgelagert. Die Verarbeitung selbst läuft Event-getriggert:
Private Sub Worksheet_Change(ByVal Target As Range)
Der Anstoß erfolgt, wenn eine bestimmte Zelle geändert wird. Der Wert der Zelle bestimmt, wie Name und Refersto heißen muss.
Daraus wird abgeleitet, ob der Name und/oder Refersto zu ändern sind (Löschen neu anlegen).
Kurzum, ich verstehe trotzdem noch nicht, warum die Rückgabe eines Name-Objekts nicht als solches bei der aufrufenden Prozedur ankommt. Erst dort soll entschieden werden, welche Aktion mit diesem Name Objekt notwendig ist. Das ist die Kernfrage für mein Ansuchen um eure Hilfe.
Beste Grüße
Michael
Und warum spielt man nicht Lotto anstatt Application.Names("a").Delete
Das Names Objecte ist sehr böse.
Mal einen Namen erzeugen in einem Blatt und dieses dann kopieren

Man muss sehr aufpassen ob man den Namen auf dem Workbook erwischt oder ...
Und Application.names ist wirklich Murks, da es einfach auf das ActiveWorkbook zugreift.

Ich muss gestehen, dass ich dies nicht von SNB erwartet hätte  05 Aber jetzt bin ich wahrscheinlich wieder der Böse Djin

Und Namen zu löschen ist sehr sinnvoll, wenn man diese vorher eingefügt hat und nicht mehr braucht.
Ganz davon abgesehen, dass diese ins Leere zeigen können (Zelle gelöscht, etc )

Das verarbeiten von Namen ist eine sehr hohe Kunst in der Programmierung von Excel - und sollte nicht auf die leichte Schulter genommen werden.

(16.07.2021, 11:57)ebhab schrieb: [ -> ]habe ja alles nur vereinfacht dargestellt, dahinter steckt mehr.
So kann ich nicht immer vom Namen ausgehen, ich benötige auch die Suche über Refersto, die komplexe Suche ist in einer globalen Funktion ausgelagert. Die Verarbeitung selbst läuft Event-getriggert:

Bevor du dich damit beschäftigst, solltest du erst einmal die ganzen Varianten der Zerstörung eines Namens dir anschauen (Zelle gelöscht, Blatt gelöscht, Bezug gelöscht, Durst gelöscht)
Das Iterieren durch Namen ist sehr heikel. Und es gib auch nicht immer ein ReferstTo (das weißt du hoffentlich).
Und auch ob es Namen auf dem Sheet oder der Mappe sind.
Oder  ...
Guten Morgen,
Vielen Dank für die Informationen, ich werde das Ganze nochmal überdenken.
Beste Grüße
Michael
Zitat:Und warum spielt man nicht Lotto anstatt Application.Names("a").Delete

Das Names Objecte ist sehr böse
Wieso ?
Wo sind die Argumente ?
Ein 'copy' Beispiel ist kein Argument für ein 'delete' Gefahr.

Das nicht lösen einer Name, wie vorgeschlagen, scheint mir ohne Lottogefahr zu sein.