Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
940to944
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
940to944
940to944
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Bereichs-Namen variabel definieren

Bereichs-Namen variabel definieren
14.01.2008 09:25:00
David
Hallo.
Sicherlich ein einfaches Problem für euch VBA-Experten:
Ich möchte die folgende Zeile
ActiveWorkbook.Names.Add Name:="compr", RefersToR1C1:="=compr!R1C1:R114C13"
so umgestalten, dass der Bezug variabel in Abhängigkeit von der letzten Zeile des Sheets ist. Das Tabellenblatt "compr" wird aus einem anderen erstellt, welches nur umsortiert wird. Allerdings kann die letzte Zeile auch anders als Zeile 114 sein.
Ich glaube, dass dies irgenwie mit "SpecialCell/LastCell" gehen könnte, leider kenne ich die richtige Syntax nicht. Der Makro-Recorder hat mir nur diesen absoluten Bezug aufgezeichnet.
Für eine kleine Hilfe wäre ich sehr dankbar.
Gruß

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereichs-Namen variabel definieren
14.01.2008 10:08:18
Alex
Ich weiss nicht ob ich deine Frage richtig verstanden habe.
Suchst du nach der letzten Zeile in der Tabelle bzw. in der Spalte?
Wenn ja , dann versuchs dammit.
Dim LastRow AS Integer
' LastRow=Letzte freie Zeile
LastRow = IIf(IsEmpty(Worksheets("Tabelle1").Range("A65536")), Worksheets("Tabelle1").Range("A65536").End(xlUp).Row, 65536)
ActiveWorkbook.Names.Add Name:="compr", RefersToR1C1:="=compr!R1C1:R" & LastRow & "C13"

AW: Bereichs-Namen variabel definieren
14.01.2008 10:21:37
David
Ja, die Frage hast du richtig verstanden.
Dein Vorschlag funktioniert auch, nur die verwendete Spalte musste ich von A auf C ändern, da die ersten beiden Spalten dummerweise leer sind.
Was mich allerdings wundert - ist es wirklich so kompliziert, die letzte verwendete Zeile in VBA zu bestimmen? Ich hätte mir die Syntax dafür doch ein wenig einfacher vorgestellt.
Auf jeden Fall erst mal vielen Dank für die schnelle Hilfe.
Gruß

Anzeige
AW: Bereichs-Namen variabel definieren
14.01.2008 22:52:00
Daniel
Hi
Alex ist halt Perfektionist und versucht, alle Fälle abzudecken.
Normalerweise reicht ein:

LastRow = Worksheets("Tabelle1").Range("A65536").End(xlUp).Row


völlig aus, es funktioniert nur dann nicht, wenn die letzte Zeile auch gefüllt ist, dann bekommst du einen kleineren Wert. Da das aber selten vorkommt, reicht im normalfall die einfache fassung.
Schwerwiegend ist aber der Fehler, daß er LastRow als Integer deklariert hat.
Integerzahlen gehen nur bis 32000 und irgendwas, reichen also für eine gut gefüllte Datei nicht aus.
wenns um Zeilennummern geht, sollte man die Variablen dazu immer als LONGINTEGER (LONG) deklarierten, da hat man einen wesentlich grösseren Zahlenraum zur verfügung.
Grade in diesem Zusammenhang macht dann seine Berechnung in der Verbindung mit der Interger-Variable keinen Sinn mehr.
Gruß, Daniel

Anzeige
AW: Bereichs-Namen variabel definieren
15.01.2008 08:26:00
David
Ok, diese Variante funktioniert auch. Die Anzahl der Zeilen bewegt sich so um die 100, so dass das auch immer ausreichen sollte.
Das mit der DIM-Anweisung wäre mir nicht aufgefallen. Ich lasse die auch meist weg, da das bisher keine negativen Auswirkungen hatte. Wenn überhaupt, deklariere ich Variablen ohne den AS-Teil. Ist wohl nicht ganz sauber, aber für meinen "Hausgebrauch" hat es bisher gereicht.
Auf jeden Fall vielen Dank, wieder ein Stück gelernt. ;-)
David

AW: Bereichs-Namen variabel definieren
15.01.2008 21:19:15
Daniel
Hi
man sollte schon immer beim Dimensionieren den AS-Teil mit berücksichtigen.
als VARIANT deklarierte Variablen brauchen mehr Speicherplatz und sind langsamer.
gut, das fällt bei im Hausgebrauch bei kleinen Dateien kaum ins gewicht, aber der Vorteil der genauen Dimensionierung ist, daß man bei Programmierfehlern schneller einen Fehler erzeugt, der zum Pogrammabbruch führt.
Somit wird der Fehler gleich beim ersten Programmlauf gefunden und kann behoben werden.
Logische Fehler, die keinen Programmabbruch erzeugen, bleiben dagegen oft lange unentdeckt, führen zu seltsamen Ergebnissen und sind dann nur schwer zu finden.
Gruß, Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige