Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1884to1888
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

.Names().RefersToRange abkürzen?

.Names().RefersToRange abkürzen?
17.06.2022 21:49:18
Ben.Blake
Hallo,
ich habe mal wieder eine Frage...
Als meine Tabellen und Funktionen - vieles von Kollegen geerbt, tlw. 20 Jahre alt - immer umfangreicher wurden und viel zwischen verschiedenen WBs wechselten, kam irgendwann der Punkt, wo ich die vorhanden Range()-Verweise durch Names().RefersToRange-Verweise ersetzt habe (außer bei Skripten, welche nur im aktuellen WB laufen). Das funktioniert soweit super, aber der Schreibaufwand ist doch recht hoch, auch wenn ich vieles mit With löse.
Nun habe ich mich gefragt, ob man Eigenschaften z.B. umleiten kann, um mit Abkürzungen darauf zugreifen zu können - auf der Ebne hab ich mich bisher mit VBA noch nicht beschäftigt. Dann könnte man z.B. .N().RR statt .Names().RefersToRange schreiben, was für Eingeweihte ja super nachvollziehbar wäre... Vielleicht gibt es da ja einen Trick?
Danke und Gruß
Ben

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: .Names().RefersToRange abkürzen?
17.06.2022 22:11:50
Yal
Hallo Ben,
es ist vieles möglich, aber nicht alles sinnvoll. Die paar Sekunden, die hier beim Tippen gespart werden, rechnen (oder soll ich "rächen" sagen?) sich später mit Unlesbarkeit und eventuelle Überschneidungen.
Was Du verwenden solltest, sind Objekt-Variablen. Diese sind nur "Zeiger" (engl. "pointer") auf die jeweiligen Objekte, aber nicht die Objekt selbst. Diese weren mit "Set" gesetzt: sezte den Zeiger auf dies oder das. Dann hast Du Zugriff auf alle Eigenschaften des Objektes. Du kannst auch mit "For Each" ein Schleife auf Auflistung en durchlaufen lassen.
Bsp.:

Sub Test()
Dim R As Range
Dim Z As Range
Set R = Worksheets("Tabelle1").Range("A3:D5")
'Ausgabe ins Direktfenster (Strg+g)
Debug.Print "Anzahl", R.Cells.Count
Debug.Print "leere", WorksheetFunction.CountBlank(R)
Debug.Print "nicht leere", R.Cells.Count - WorksheetFunction.CountBlank(R)
For Each Z In R.Rows
Debug.Print Z.Row, Z.Cells.Count, WorksheetFunction.CountBlank(Z.Cells)
Next
End Sub
Viel Erfolg
VG
Yal
Anzeige
AW: .Names().RefersToRange abkürzen?
17.06.2022 22:45:44
Ben.Blake
Danke, das muß ich mir erstmal genauer anschauen... ;)
verstehe ich das richtig, daß ich da alle Bereiche, auf die ich zugreifen will, so erstmal setzen muß, und dann per Variable darauf zugreife?
AW: .Names().RefersToRange abkürzen?
17.06.2022 23:33:30
Yal
wo es Sinn macht, musst Du selber entdecken. Vielleicht kannst Du einige Zeilen posten, so dass wir eine Ahnung davon bekommen. Dann kann ich Dir ein paar Vorschläge machen und kommentieren warum.
VG
Yal
AW: .Names().RefersToRange abkürzen?
20.06.2022 10:31:15
Ben.Blake
Da gäbe es nicht viel zu posten - im Grunde wäre ein Zeiger auf die Funktion herzustellen diese Funktion dann mittels des Zeigers aufzurufen genau das, was ich brauchen würde. Es hätte ja sein können, daß es sowas gibt und man sich dann damit Abkürzungen einrichten kann. Wenn das nur mit dem Zeiger auf das Objekt selbst geht, den man am Anfang definieren muß, dann hat es ja nur einen Sinn, wenn man ein und dasselbe Objekt mehrfach benötigt, das ist aber selten der Fall und wenn, dann auch nur zwei, vielleicht drei mal. Aber der Vorschlag von Daniel klingt super...
In den Auswertungsdateien, um die es geht, waren - bevor ich die in die Hände bekommen habe - alle Vorgänge mit WB-, WS-Wechsel und Zellmarkierungen usw. gemacht, was ich dann ganz gut beschleunigen konnte. Wenn jetzt mit einer Funktion ein paar 10tel Sekunden wieder drauf kommen, ist das zu verschmerzen...
Aber Danke, für Deinen Hinweis!
Anzeige
AW: .Names().RefersToRange abkürzen?
18.06.2022 12:14:38
Daniel
Hi
Du kannst das Auslesen von Eigenschaften als Funktion schreiben und diese dann aufrufen

Public Funktion NRR(strName) as Range
Set NRR = Thisworkbook.Namens(strName).RefersToRange
End Function
Und diese dann aufrufen.

NNR(deinName).Select
Gruß Daniel
AW: .Names().RefersToRange abkürzen?
20.06.2022 10:31:09
Ben.Blake
Hallo Daniel,
Super, man könnte meinen, daß ich noch nie mit selbst erstellen Funktionen gearbeitet hätte - auf die Idee hätte ich auch selbst kommen können... ;)
Vielen Dank!
AW: .Names().RefersToRange abkürzen?
21.06.2022 08:08:18
Ben.Blake
Hallo, ich habe es jetzt getestet. Kleiner Abzug in der B-Note (Tipfehler) ;) . Für die, die Copy-Pasten wollen hier korrigiert:

Public Funktion NRR(strName) as Range
Set NRR = Thisworkbook.Names(strName).RefersToRange
End Function
Vielen Dank!
Ich habe so etwas über 100 Aufrufe in einem Sub geändert - es ist keine Verlangsamung feststellbar...
Anzeige
AW: .Names().RefersToRange abkürzen?
21.06.2022 08:27:56
Ben.Blake
Nachtrag: auf 10tel Sekunden gemessen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige