Clever-Excel-Forum

Normale Version: alte UsedRange löschen und neue definieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Community!

Ich habe schon öfter mitbekommen, dass das Arbeiten mit UsedRange bei dynamischen Tabellen/ Bereichen problematisch sein kann.
Da ich nun auch vor dieser Problematik stehe, dass ein Bereich gelöscht wird und die UsedRange sich dadurch auf leere Zellen bezieht, suche ich nun eine Lösung die UsedRange neu aufzusetzen.
Wie bekomme ich dies am elegantesten hin, ohne jeden Code nun umzuschreiben?

Es soll nur kurz die alte UsedRange gelöscht werden und die neue definiert werden.

Welche Alternativen gibt es zu UsedRange?

Meine erste prozedur ab dem neuen Bereich sieht folgendermaßen aus.

Code:
Sub Colour()
   Dim Zeile As Long
  Dim ZeileMax As Long
 
  With tblMax

       ZeileMax = .UsedRange.Rows.Count
     
          For Zeile = 2 To ZeileMax
              If .Range("K" & Zeile).Value = "" Then
                   .Range("K" & Zeile).Interior.Color = Range("K" & Zeile - 1).Interior.Color
              End If
       
          Next Zeile
         
  End With
 
End Sub
Usedrange hat nichts mit dynamische Tabellen zu tun.

Wozu brauchst du 'Usedrange'  überhaupt?

Für Tabellen gibt's einfach .Listobjects(1).Range oder Listobjects(1).databodyrange.
(16.03.2017, 10:01)snb schrieb: [ -> ]Usedrange hat nichts mit dynamische Tabellen zu tun.

Wozu brauchst du 'Usedrange'  überhaupt?

Für Tabellen gibt's einfach .Listobjects(1).Range oder Listobjects(1).databodyrange.

Ich brauche eie, damit die Schleife ab der zweiten bis zur letzten Zeile durchlaufen wird.
In einer anderen Prozedur brauche ich die UsedRange als Bereich zur Betitelung (referstorange).

Komme mit deinem Ansatz leider nicht weiter.

Edit:

habe es nun folgendermaßen hinbekommen:
Code:
Sub Colour()


   Dim Zeile As Long
   Dim ZeileMax As Long
   Dim LastRow As Long

   With tblMax
      
       LastRow = Cells(Rows.Count, "A").End(xlUp).Row
      
           For Zeile = 2 To LastRow
               If .Range("K" & Zeile).Value = "" Then
                    .Range("K" & Zeile).Interior.Color = Range("K" & Zeile - 1).Interior.Color
               End If
        
           Next Zeile
          
   End With

Ich würde trotzdem gern wissen, ob und wie man die UsedRange neu definieren kann.
Hallo,

(16.03.2017, 10:25)joshua schrieb: [ -> ]Ich würde trotzdem gern wissen, ob und wie man die UsedRange neu definieren kann.

es gibt UsedRange auch als Anweisung: ActiveSheet.UsedRange
Sie funktioniert aber wohl nicht zuverlässig.
Siehe z.B. hier: http://www.online-excel.de/fom/fo_read.php?f=1&bzh=63505&h=63439#a123x

Gruß Uwe
Auch dein VBEditor enthällt eine F1 Taste:

Excel Developer Reference
Worksheet.UsedRange Property
Returns a Range object that represents the used range on the specified worksheet. Read-only.
Hallöchen,

bei einem funktionierenden usedrange wird er automatisch neu definiert, wenn sich was bei den ersten oder letzten Zellen ändert.

Man muss auch darauf achten, wo der usedrange liegt. Wenn z.B. die Zeile 1 leer ist, funktioniert das nicht ganz korrekt:

ZeileMax = .UsedRange.Rows.Count
For Zeile = 2 To ZeileMax
...

Angenommen, Du hast den Bereich A2:B3 mit Daten. Dann ist die ZeileMax = 2. Deine Schleife wird also 1x durchlaufen, Du wolltest in dem Fall aber bestimmt zwei Durchläufe.