Größe benutzter Range ermitteln, Teil 2
05.02.2018 07:08:33
Hans-Jürgen
ich bin immer noch dabei, für einen Range zu ermitteln, inwieweit er durch den User gefüllt ist. (Siehe Frage von gestern).
Gestern war ich noch drauf aus, die Zeilennummern zu lokalisieren, um einen neuen Range zu "bauen". Mir hat die Lösung (vielen Dank auch an Sepp und Hajo) allerdings keine Ruhe gelassen, weil ich glaubte, dass ich mich vielleicht zu kompliziert ausgedrückt habe und ihr mit eurer Lösung mehr abgedeckt habt als erforderlich war.
Ich hatte nun eine andere Idee: Wir haben ein ähnliches Programm, das ein erfahrener Kollege geschrieben hatte (allerdings diese Woche in Urlaub). Ich wusste, dass an einer Stelle auch der gefüllte Bereich ermittelt werden musste, und er hat das so gelöst:
Function BenutztenBereichErmitteln(aktBereich As Object) As Object
Dim aktZelle As Object
Dim aktLetzteZeile As Long
For Each aktZelle In aktBereich
If aktZelle.Value = "" Then
aktLetzteZeile = aktZelle.Row - 1
Exit For
End If
Next
Set BenutztenBereichErmitteln = aktBereich.Resize(aktZelle.Row - aktBereich.Cells(1).Row)
End Function
Ich habe das in mein Programm eingebaut, getestet und - funktioniert.
Mein Problem ist allerdings: Bei obigem Ausschnitt war klar, dass der Range nur eine Spalte breit ist. Das passt aber nicht auf meine Anforderung. Ich brauche die Funktion möglichst variabel. Ich habe nun versucht, das anzupassen, indem ich zwei Schleifen baue, jeweils
- aus der ersten Spalte die letzte benutzte Zeile und
- aus der ersten Zeile die letzte benutzte Spalte
rmittle um nachher zu "resizen". Ich habe die Schleifen so gebaut:
For Each aktZelle In aktBereich.Columns(1)
If aktZelle.Value = "" Then
aktLetzteZeile = aktZelle.Row - 1
Exit For
End If
Next
For Each aktZelle In aktBereich.Rows(1)
If aktZelle.Value = "" Then
aktLetzteSpalte = aktZelle.Column - 1
Exit For
End If
Next
Das klappt aber nicht, bereits die zweite Zeile (If aktZelle.Value = "" Then) bringt mir einen Typenkkonflikt und ich weß nicht, warum. Ich habe doch nur in der Schleife klar gestellt, dass ich nur die erste Spalte durchlaufen will. Wo ist der Denkfehler?
Schon mal vielen Dank voraus für eure Hilfe, ihr seid wirklich klasse!
Viele Grüße
Hans-Jürgen