Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
616to620
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
616to620
616to620
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Range per VBA bilden

Range per VBA bilden
02.06.2005 16:49:01
Stephan
Hallo.
Hänge mal wieder. Ich suche ein Skript (oder die Struktur), die es mir ermöglicht, die ExcelFunktion "Einfügen/Namen/Festlegen" (Ranges festlegen) zu realisieren. Dies soll in Abhängigkeit der beschriebenen Zeilen/Zellen eines Excelblattes möglich sein.
Koennte mir da folgenden Sachverhalt vorstellen:
Bilde Range von A1 bis "beschrieben Zeilen" (Count) des Blattes.
Danke für die Hilfe.

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range per VBA bilden
02.06.2005 17:14:26
Matthias
Hallo Stephan,
ein Beispiel für Spalte A:
Sub NameFestlegen()
Dim lastrow As Long
Dim Tabelle As String
Tabelle = ActiveSheet.Name
lastrow = Range("A65536").End(xlUp).Row
If Range("A65536") <> "" Then lastrow = 65536
ActiveWorkbook.Names.Add Name:="testname", _
RefersTo:="=" & Tabelle & "!A1:A" & lastrow
End Sub
Gruß Matthias
AW: Range per VBA bilden
02.06.2005 17:26:11
Stephan
Hey Mathias. Vom Grund eher schon klar. Ich schau mir das Excel-Blatt an und zaehle von unten nach oben die Zellen durch, bis ich auf Zellen mit Werten treffe und lasse mir dann den Wert zurückgeben. Aber noch ein paar Fragen zum Skript :
lastrow = Range("A65536").End(xlUp).Row
'' Eigentlich müsste es doch Range(A65536) heißen, da es ja sonst als Name des Ranges
'' aufgefasst wird, oder ?
If Range("A65536") "" Then lastrow = 65536
'' Was soll denn hier die Übergabe von 65536 bewirken ?
ActiveWorkbook.Names.Add Name:="testname", _

RefersTo:="=" & Tabelle & "!A1:A" & lastrow
'' Warum hier nochmal & lastrow ?
End Sub
Anzeige
AW: Range per VBA bilden
02.06.2005 17:36:15
Matthias
Hallo Stephan,
lastrow = Range("A65536").End(xlUp).Row
'' Eigentlich müsste es doch Range(A65536) heißen, da es ja sonst als Name des Ranges
'' aufgefasst wird, oder ?

Nein, das Argument beim Range() ist ein String oder zwei Zellen, die den Anfang und das Ende des Bereichs markieren, z.B. Range(Cells(1,1), Cells(3,4)) (vgl. VBA-Hilfe)
If Range("A65536") "" Then lastrow = 65536
'' Was soll denn hier die Übergabe von 65536 bewirken ?
Wenn in der letzten Zeile (65536) ein Wert steht , gibt der Ausdruck "Range("A65536").End(xlUp).Row" den (falschen) Wert 1 zurück, das würde hier korrigiert werden.
ActiveWorkbook.Names.Add Name:="testname", _
RefersTo:="=" & Tabelle & "!A1:A" & lastrow
'' Warum hier nochmal & lastrow ?
Warum nicht? der String, der gebildet wird, heißt dann z.B: "=Tabelle1!A1:A210" (bei lastrow=210)
Gruß Matthias
Anzeige
AW: Range per VBA bilden
02.06.2005 17:22:10
MichaV
Hi,
nimm z.B.
ActiveWorkbook.Names.Add Name:=ActiveSheet.Name, RefersTo:= _
"=" & ActiveSheet.Name & "!" & ActiveSheet.UsedRange.Address
Gruß- Micha
AW: Range per VBA bilden
02.06.2005 17:35:00
Stephan
Hey Micha.
Das nenne ich aber mal elegante Lösung. Sofort verstanden, wie du das Problem gelöst hast, Vielen Dank.
Einziges Frage, die für mich bleibt. Du setzt mit deinem Skript voraus, dass der gesamte Inhalt des Blattes benutzt wird. Wie bekomme ich es denn hin, dass er mir beispielsweise erst ab Zeile 15 den gesamten beschriebenen Inhalt in den Range zieht ?
Danke.
AW: Range per VBA bilden
02.06.2005 19:14:18
MichaV
Hallo
Brechstangenmethode, aber mir fällt gerade echt nicht ein, wie ich die letzte Zelle/ Zeile aus der UsedRange- Eigenschaft rauskriege :o(
So gehts von Zeile 15 bis zur letzten benutzten Zeile.

ActiveWorkbook.Names.Add Name:=ActiveSheet.Name, RefersTo:= _
"=" & ActiveSheet.Name & "!" & _
"$15:$" & _
Range(Right(ActiveSheet.UsedRange.Address, Len(ActiveSheet.UsedRange.Address) - InStrRev(ActiveSheet.UsedRange.Address, ":"))).Row

Gruß- Micha
PS: Rückmeldung wäre nett.
Anzeige
AW: Range per VBA bilden
02.06.2005 22:14:21
Ramses
Hallo Micha
Im Normalfall beginnt die Usedrange mit 1 und endet irgendwo
activesheet.usedrange.rows.count
:-)
Gruss Rainer
AW: Range per VBA bilden
03.06.2005 08:17:26
MichaV
Guten Morgen Rainer,
muß ja aber nicht sein. Wenn die 1. Zeile leer ist, dann kommt schon ein falsches Ergebnis raus. Auf .Count will ich mich darum nicht verlassen. Möglich wäre ja noch .FirstRow + .Count, aber sowas wie FirstRow gibts ja genauso wenig wie das von mir gesuchte .LastRow :o(
Wäre aber froh, wenn mir jemand eine elegantere Methode nennen könnte (außer .End(xlup))
Gruss- Micha
AW: Range per VBA bilden
03.06.2005 13:44:14
Stephan
Hey Micha. Er erkennt das "InStrRev" nicht. Sagt, dass keine Sub / Funktion definiert es, fasst es also nicht als Excel-Funktion auf. Vielleicht Schreibfehler ?
Anzeige
AW: Range per VBA bilden
03.06.2005 15:03:35
Ramses
Hallo
"InstrRev" gibt es erst ab Excel 2000
Probier's mal so

Sub Add_Name_Range()
ActiveWorkbook.Names.Add Name:=ActiveSheet.Name, RefersTo:= _
"=" & ActiveSheet.Name & "!" & _
"$15:$" & ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row - 1
End Sub

Aber mit den "... gesamten beschrieben Zeilen..." ist das so eine Sache.
"Used" im Sinne von Excel ist eine Zelle schon, wenn diese nur formatiert, z.B. eine andere Schriftart, wurde.
Daher ist "UsedRange" immer nur bedingt geeignet bereiche zu definieren
Gruss Rainer
Anzeige
AW: Range per VBA bilden
03.06.2005 15:37:11
Stephan
Danke Rainer. Genau damit schlage ich mich den ganzen Rag schon rum, als ich bemerkt habe, dass "UsedRange" in der Tat nicht unbedingt nur mit dem Inhalt zu Tun hat. Gibt es da vielleicht noch ne Alternative ?
AW: Range per VBA bilden
03.06.2005 15:50:05
Ramses
Hallo
probiers mal so

Sub Add_Name_Range()
Dim i As Long, lastR As Long
For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
If WorksheetFunction.CountA(Rows(i & ":" & i)) <> 0 Then
lastR = i
Exit For
End If
Next i
ActiveWorkbook.Names.Add Name:=ActiveSheet.Name, RefersTo:= _
"=" & ActiveSheet.Name & "!" & _
"$15:$" & lastR + ActiveSheet.UsedRange.Row - 1
End Sub

Gruss Rainer
Anzeige
AW: Range per VBA bilden
03.06.2005 16:01:22
Stephan
Habe verstanden, wie du ran gehen willst. Heisst das "CountA" in der IF-Abfrage, dass er nur in Spalte A schaut ? Oder ist CountA ne feste Funktion ?
AW: Range per VBA bilden
03.06.2005 18:16:52
Ramses
Hallo
"CountA" bezieht sich hier auf die gesamte Zeile !!
"CountA" zählt ALLE Einträge in dieser Zeile. Ist diese NULL wird die Zeile verworfen weil keine Daten drin sind.
Gruss Rainer

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige