Benutzung von ApplyNames

Hallo Wissende,
ich bin über ApplyNames gestolpert, kriege aber immer Fehler, meist 1004, wenn ich die Zeile aus der VbaHilfe ausprobiere.
Was muß ich tun um den Code zum Laufen zu bringen?

Der Code:
(ggfs in der Hilfe prüfen ob ich hier die korrekte Syntax geschrieben habe, bei Tests hatte ich die Originalzeile(n) aus den Vba-Hilfen. Weder in Xl97, xl2000 noch xl2003 lief der Code. Es spielte auch keine Rolle ob „Budget“ und „Preis“ vorher definiert waren oder nicht.)

Sub Test()
Cells.ApplyNames Names:=Array(„Budget“,„Preis“)
End Sub

Danke und frohe Feiertage
Reinhard

Hallo Unwissender :wink:

Weder in Xl97, xl2000 noch xl2003 lief der Code.

Also laut Microsoft Knowledge Base ist ein Fehler im Zusammenhang mit ApplyNames() ab Excel 2000 behoben.

Es spielte auch keine Rolle ob „Budget“ und „Preis“ vorher definiert waren oder nicht.

Das mag vielleicht auf Excel 97 zutreffen, aber ab 2000 geht es auf jeden Fall. Es reicht, wenn nur ein einziger Name in der Arbeitesmappe definiert ist, gleichgültig, ob „Otto“ oder „Budget“ oder sonstwas. Sowie ein Name definiert ist, verschwindet die Fehlermeldung, löscht man den letzten Namen, ist sie wieder da.

Wenn man nur einen einzgen Bezug in einer Formel ersetzen will, also nur ein einziger Name eine Rolle spielt, kann man sich das mit dem Array übrigens auch sparen. Beispiel:

Zelle C3 hat den Namen „MeineZelle“ erhalten, nachdem in Zelle K3 die folgende Formel geschrieben wurde:

 =C3 + 1

Dann kann ich das „C3“ in der Formel wie folgt durch „MeineZelle“ ersetzen lassen:

 Range("K3").ApplyNames "MeineZelle" oder
 Cells(3,11).ApplyNames "MeineZelle"

Man kann auch folgendes schreiben:

 Range("K3").ApplyNames "eineZelle"

aber dann passiert gar nichts, weil der Name nicht existiert.

Kristian

PS: Bis vor zwei Minuten kannte ich ApplyNames() überhaupt noch nicht. Aber ein Blick in die Suchmaschine mit „G“ …

Hallo Kristian,

Weder in Xl97, xl2000 noch xl2003 lief der Code.

Also laut Microsoft Knowledge Base ist ein Fehler im
Zusammenhang mit ApplyNames() ab Excel 2000 behoben.

Okay, ich gebe zu, in Xl97 habe ich alles was mir so einfiel ausprobiert, da ging schonmal ne Stunde weg, in Xl2000 beträchtlich weniger und in Xl2003 habe ich an sich nur die Hilfe Hilfesuchend angeschaut, den Beispielcode getestet.
Naja, normales Verhalten, wenn das Wissen wofür dieses Applyteil überhaupt ist und wie man es in Gang kriegt nahe an Null hängenbleibt und der Frust von Versuch zu Versuch steigt :smile:

Es spielte auch keine Rolle ob „Budget“ und „Preis“ vorher definiert waren oder nicht.

Das mag vielleicht auf Excel 97 zutreffen, aber ab 2000 geht
es auf jeden Fall. Es reicht, wenn nur ein einziger Name in
der Arbeitesmappe definiert ist, gleichgültig, ob „Otto“ oder
„Budget“ oder sonstwas. Sowie ein Name definiert ist,
verschwindet die Fehlermeldung, löscht man den letzten Namen,
ist sie wieder da.

OkayII, teste ich mit Xl2000.

Wenn man nur einen einzgen Bezug in einer Formel ersetzen
will, also nur ein einziger Name eine Rolle spielt, kann man
sich das mit dem Array übrigens auch sparen. Beispiel:

Zelle C3 hat den Namen „MeineZelle“ erhalten, nachdem in Zelle
K3 die folgende Formel geschrieben wurde:

=C3 +
1

Dann kann ich das „C3“ in der Formel wie folgt durch
„MeineZelle“ ersetzen lassen:

Range(„K3“).ApplyNames
„MeineZelle“ oder
Cells(3,11).ApplyNames „MeineZelle“

Man kann auch
folgendes schreiben:

Range(„K3“).ApplyNames
„eineZelle“

aber dann passiert gar nichts, weil der Name
nicht existiert.

Ach, so ist das :smile:

PS: Bis vor zwei Minuten kannte ich ApplyNames()
überhaupt noch nicht. Aber ein Blick in die Suchmaschine mit
„G“ …

Wer kennt das schon, ich hatte in „G“ in Groups gesucht, kaum Treffer, nagut, nicht auf „alle Sprachen“ gesucht.
May be, wenn erstmal der Code funktioniert, versthe ich eventuell wofür man das sinnvoll benutzen kann. Ich habe da einige vage, leider unterschiedliche Vermutungen.

Danke für deine Mühen
Gruß
Reinhard

Wer kennt das schon, ich hatte in „G“ in Groups gesucht, kaum
Treffer, nagut, nicht auf „alle Sprachen“ gesucht.

Groups? Das habe ich noch nie benutzt. Ganz simpel die normale Suche reicht doch aus. Aber warum einfach, wenn´s auch kompliziert geht :wink:

May be, wenn erstmal der Code funktioniert, versthe ich
eventuell wofür man das sinnvoll benutzen kann. Ich habe da
einige vage, leider unterschiedliche Vermutungen.

Also wozu die Funktion selbst da ist, sollte ja nun klar sein: Im Beispiel wird die Formel „=C3 + 1“ in „=MeineZelle + 1“ geändert, weil C3 den Namen „MeineZelle“ trägt. Mehr nicht. Kann ganz nützlich sein und werde ich im Hinterkopf behalten. Was Du nun daraus machst - Du sagst es ja selbst - musst Du Dir jetzt überlegen.

Wenn man übrigens Namen erstmal definieren will, muss man wahrscheinlich mit ActiveWorkbook.Names.Add oder so ähnlich arbeiten. Kann es jetzt nicht nachgucken. Für´s Löschen gibt´s sicher eine analoge Methode.

An der Stelle wird auch klar, dass Namen keine Tabellenblatt-Eigenschaften sind, sondern Arbeitsmappen-Eigenschaften. Und sie gelten demnach in der gesamten Mappe, nicht nur auf einem Arbeitsblatt. Das hat sowohl Vor-, als auch Nachteile.

Danke für deine Mühen

Keine Ursache.
Kristian

Hallo Kristian,

Groups? Das habe ich noch nie benutzt. Ganz simpel die normale
Suche reicht doch aus. Aber warum einfach, wenn´s auch
kompliziert geht :wink:

Ich suche erstmal nur in Groups. Okay, ist ein *grübel* zwi klicks mehr :smile:

Also wozu die Funktion selbst da ist, sollte ja nun
klar sein: Im Beispiel wird die Formel „=C3 + 1“ in
„=MeineZelle + 1“ geändert, weil C3 den Namen „MeineZelle“
trägt. Mehr nicht. Kann ganz nützlich sein und werde ich im
Hinterkopf behalten. Was Du nun daraus machst - Du sagst es ja
selbst - musst Du Dir jetzt überlegen.

Werde ich tun, ich hasse Inet-Cafes ohne Excel wo ich gleich testen kann :frowning:)

An der Stelle wird auch klar, dass Namen keine
Tabellenblatt-Eigenschaften sind, sondern
Arbeitsmappen-Eigenschaften. Und sie gelten demnach in der
gesamten Mappe, nicht nur auf einem Arbeitsblatt. Das hat
sowohl Vor-, als auch Nachteile.

Bist du dir da völlig sicher, was würdest du denn wetten dass es einen Namen nur einmal pro Arbeitsmappe geben kann *Im Safe schon mal Platz schaffe*, ich halte dagegen :smile:
Genau gesagt halte ich es für sehr möglich daß in einer Arbeitsmappe ein beliebiger Name wie z.B. „Bereich“ festgelegt ist, der sich sowohl auf z.B.: =Tabelle1!A1 als auch auf z.B.: Tabelle23!B5 bezieht, jenachdem in welchem Blatt man ist o.ä.

Gruß
Reinhard

Ich suche erstmal nur in Groups. Okay, ist ein *grübel* zwi klicks mehr :smile:

Wie gesagt, ich kenne es nicht und weiß auch nicht, wozu es gut sein soll, wenn man nach solchen Hinweisen sucht. Aber jeder so, wie er denkt :wink:

Werde ich tun, ich hasse Inet-Cafes ohne Excel wo ich gleich testen kann :frowning:)

Tja, schlechtes Internet-Café erwischt. Aber okay, was soll man in der Provinz erwarten :wink:

Bist du dir da völlig sicher, was würdest du denn wetten dass
es einen Namen nur einmal pro Arbeitsmappe geben kann *Im Safe
schon mal Platz schaffe*, ich halte dagegen :smile:

Das ist gut, dass Du im Safe schon mal Platz schaffst. Ich gebe Dir auch gleich meine Kontonummer, damit Du das weggeräumte Geld gleich übermorgen da einzahlen kannst.

Genau gesagt halte ich es für sehr möglich daß in einer
Arbeitsmappe ein beliebiger Name wie z.B. „Bereich“ festgelegt
ist, der sich sowohl auf z.B.: =Tabelle1!A1 als auch auf z.B.:
Tabelle23!B5 bezieht, jenachdem in welchem Blatt man ist o.ä.

Tja, diese blöden Provinz-Internet-Cafés können ganz schön teuer werden … Wieviel hattest Du denn drin im Safe? Ich freu mich jedenfalls über´s Ostergeld und bedanke mich schonmal ganz höflich.

:wink:

Bist du dir da völlig sicher, was würdest du denn wetten dass
es einen Namen nur einmal pro Arbeitsmappe geben kann *Im Safe
schon mal Platz schaffe*, ich halte dagegen :smile:

Das ist gut, dass Du im Safe schon mal Platz schaffst. Ich
gebe Dir auch gleich meine Kontonummer, damit Du das
weggeräumte Geld gleich übermorgen da einzahlen kannst.

Genau gesagt halte ich es für sehr möglich daß in einer
Arbeitsmappe ein beliebiger Name wie z.B. „Bereich“ festgelegt
ist, der sich sowohl auf z.B.: =Tabelle1!A1 als auch auf z.B.:
Tabelle23!B5 bezieht, jenachdem in welchem Blatt man ist o.ä.

Tja, diese blöden Provinz-Internet-Cafés können ganz schön
teuer werden … Wieviel hattest Du denn drin im Safe? Ich
freu mich jedenfalls über´s Ostergeld und bedanke mich
schonmal ganz höflich.

Hallo Kristian,
wie war das mit dem Bären, erst dann das Fell zerlegen wenn man es denn abgestreift hat, insofern ist deine Vorfreude a zu früh und b irrtümlich denn deine Bankkonten sind bald im schwarzen Bereich, allerdings ist das nur die Trauerfarbe wegen der Null bei „Haben“ :smile:

Unzweifelhaft wird hier 2mal der gleiche Name „Bereich“ für zwei unterschiedliche Bereiche vergeben.

ActiveWorkbook.Names.Add Name:=„Bereich“, RefersToR1C1:="=Tabelle1!R1C1"
ActiveWorkbook.Names.Add Name:=„Bereich“, RefersToR1C1:="=Tabelle23!R5C2"

Nach deiner Namensdefinition wäre hier nur die jeweils letzte Namensdeklaration gültig.

Aber, je nachdem ob man sich in Tab1 oder Tab23 befindet erhält man mit „=Bereich“ entweder den Inhalt von Tabelle1!A1 oder von Tabelle1!B5. Beweis, siehe nachfolgenden Code.

Gruß und schönes Restosterfest
Reinhard

Option Explicit

Sub Makro1()
ActiveWorkbook.Names.Add Name:=„Bereich“, RefersToR1C1:="=Tabelle1!R1C1"
Sheets(„Tabelle1“).Select
Sheets(„Tabelle1“).Copy After:=Sheets(3)
Sheets(„Tabelle1 (2)“).Select
Sheets(„Tabelle1 (2)“).Name = „Tabelle23“
ActiveWorkbook.Names.Add Name:=„Bereich“, RefersToR1C1:="=Tabelle23!R5C2"
Worksheets(„Tabelle1“).Range(„A1“) = „Ich bin die 1“
Worksheets(„Tabelle23“).Range(„B5“) = „Ich bin die 23“
Worksheets(„Tabelle1“).Range(„A2“).FormulaLocal = „=Tabelle1!Bereich“
Worksheets(„Tabelle1“).Range(„A3“).FormulaLocal = „=Tabelle23!Bereich“
'Worksheets(„Tabelle1“).Range(„A2“).FormulaLocal = „=Bereich“
'Worksheets(„Tabelle1“).Range(„A3“).FormulaLocal = „=Bereich“
End Sub

Hallo Kristian,
wie war das mit dem Bären, erst dann das Fell zerlegen wenn man es denn abgestreift hat

Hier gibt es keine Bären :wink:

insofern ist deine Vorfreude a zu früh und b irrtümlich denn deine Bankkonten sind bald im schwarzen Bereich, allerdings ist das nur die Trauerfarbe wegen der Null bei „Haben“ :smile:

Wir haben ja noch nicht gesagt, um WIEVIEL Du wetten wolltest :wink:

Unzweifelhaft wird hier 2mal der gleiche Name „Bereich“ für zwei unterschiedliche Bereiche vergeben.

ActiveWorkbook.Names.Add Name:=„Bereich“, RefersToR1C1:="=Tabelle1!R1C1"
ActiveWorkbook.Names.Add Name:=„Bereich“, RefersToR1C1:="=Tabelle23!R5C2"

Das sieht zumindest so aus und ist auch so.

Nach deiner Namensdefinition wäre hier nur die jeweils letzte Namensdeklaration gültig.

Stimmt. Das wäre so.

Aber, je nachdem ob man sich in Tab1 oder Tab23 befindet
erhält man mit „=Bereich“ entweder den Inhalt von Tabelle1!A1
oder von Tabelle1!B5. Beweis, siehe nachfolgenden Code.

Beweis geht auch ohne den Code :wink: Ich sah einfach meine Chance, mit der starken Bluff-Methode ein bisschen Geld zu erwetten - hat leider nicht geklappt, weil Du Dich noch gewehrt hast :wink:

Nein, Du hast Recht, mit VBA lässt sich sowas machen und selbt mit dem Namens-Dialog müsste es gehen (habe ich aber noch nie probiert). Und wenn Du Blätter duplizierst, passiert das automatisch. Das blöde ist nur, dass es nicht so richtig konsistent gelöst ist. Mit der einfachsten Methode (Eingabe des Namens direkt ins Namensfeld oben links) kriegt man das leider nicht hin. Damit schafft man nur dokumentweit gültige Namen. Kommt dann z.B. mittels VBA ein gleicher Name für ein anderes Blatt hinzu, verschwindet der Name ganz aus der Auswahlbox oben links. Legt man allerdings alle nur mit VBA an, sind sie vorhanden. Alles bissl doof, und mit dem Bearbeiten OHNE VBA (also mittels Dialog) muss man höllisch aufpassen.

Gruß und schönes Restosterfest
Reinhard

Danke, Dir auch. Gut, dass ich nicht auf die Wette eingegangen war :wink: