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

Usedrange Verständnisproblem?

Usedrange Verständnisproblem?
05.12.2012 11:26:25
Matze,Matthias
Hallo Zusammen,
benutze dieses Makro um die Zeilen des UsedRange zu löschen.
Wichtig ist ab Zeile3 , die ersten 2 Zeilen müssen bleiben!
Sub DB_Kill()
Dim strPW As String
Dim n
strPW = InputBox("Passwort erforderlich!", "Passwortabfrage")
With Tabelle4
.Unprotect
Select Case strPW
Case .Cells(1, 1).Value
Case Else
MsgBox "Kennwort ungültig", vbExclamation + vbOKOnly, "Falsches Kennwort"
Exit Sub
End Select
Intersect(.Rows("3:" & Rows.Count), .UsedRange).Delete 'mache ich hier was falsch?
.Protect
End With
End Sub
Makro gestartet, alles ist weg, ABER:wenn ich nun dieses Makro starte
Sub shUrange()
Debug.Print ActiveSheet.UsedRange.Address
End Sub
sehe ich im Direktfenster : $A$1:$P$54
somit ist klar das der Usedrange noch besteht, was muss ich tun, damit wirklich nur noch A1:P2 als Userrange da sind?
grübelder Matze

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

Betreff
Datum
Anwender
Anzeige
AW: Usedrange Verständnisproblem?
05.12.2012 11:28:52
ransi
HAllo Matze
Speicher mal nach dem Löschen.
ransi

Keine Änderung,...schnief,..
05.12.2012 11:37:19
Matze,Matthias
..noch ein Tipp?

AW: Usedrange Verständnisproblem?
05.12.2012 12:14:25
Klaus
Hi,
die Usedrange wird erst nach speichern der Datei angepasst!
Ich hab meine Probleme mit dem Intersect-Befehl, darum würd ich's so machen:
.Range("A3:A" & rows.count).entirerow.delete shift:=xlup
das sollte (nach dem speichern) die UsedRange auf A1:P2 begrenzen.
Brauchst du das auch für Spalten? Warscheinlich nicht, oder?
Grüße,
Klaus M.vdT.

Danke Klaus u. Ransi,..
05.12.2012 12:52:23
Matze,Matthias
wieder mal was gelernt das der UsedRange erst nach dem speichern angepasst wird.
Mal nachlesen warum das so sein muss, ich hatte auch schon mit aktuallieseren "calculate" getestet aber da war kein Erfolgt mit zu bekomen.
Das mit dem Intersect werde ich nun möglichst vermeiden, dein Tipp , Lösung dazu ist gut.
Dankender Matze

Anzeige
nichts spricht gegen Intersect ....
05.12.2012 13:16:26
Klaus
Das mit dem Intersect werde ich nun möglichst vermeiden, dein Tipp
Hallo Matze,
bevor mir jetzt wieder was nachgesagt wird: Ich habe dir nirgendwo geraten, Intersect zu vermeiden! Ich habe nur gesagt, dass ich damit nicht umgehen kann (weil ich das bisher noch nicht brauchte). Das ich ein VBA-Kommando nicht kann heisst nicht, dass es nicht benutzt werden darf - so wichtig bin ich (leider) nicht.
Grüße,
Klaus M.vdT.

Intersect + Vorschlag
05.12.2012 18:20:53
Tino
Hallo,
Intersect (range1,range2) gibt den Zellbereich zurück der sich mit range1 und range2 kreuzt.
Also der Bereich der sich in Range1 und Range2 befindet.
Beispiel Intersect(Range("B1:C10"), Range("A5:C5")) ergibt die Zelle B5:C5 (Bsp. unten grün)
 ABC
1   
2   
3   
4   
5   
6   
7   
8   
9   
10   

Intersect(.Rows("3:" & Rows.Count), .UsedRange)
Ist demnach der Bereich der sich ab Zeile 3 bis zur letzten im Benutzen Bereich befindet.
Wenn der Benutzte Bereich von Zeile 1 bis Zeile 100 geht, wird Zeile 3 bis 100 wiedergegeben und mit Delete gelöscht.
Persönlich lösche ich den unbenutzten Bereich unten so.
Beispiel:
Sub Empty_BereichUnten()
Dim rFormelZelle As Range, rValueZelle As Range, rZelle As Range

With Tabelle4
     'UsedRange 
     Set Bereich = .UsedRange
     'Suche letzte Zelle mit Formel 
     Set rFormelZelle = Bereich.Find("*", , xlFormulas, 2, 1, 2, False, False)
     'letzte Zelle mit Wert 
     Set rValueZelle = Bereich.Find("*", , xlValues, 2, 1, 2, False, False)
     
     If rFormelZelle Is Nothing Then Set rFormelZelle = .Cells(.Rows.Count, 1)
     If rValueZelle Is Nothing Then Set rValueZelle = .Cells(.Rows.Count, 1)
     
     'Prüfe welche davon die letzte ist 
     If rFormelZelle.Row <= rValueZelle.Row Then
       Set rZelle = rValueZelle
     Else
      Set rZelle = rFormelZelle
     End If

    If (rZelle.Row < .Rows.Count) And (rZelle.Row > 2) Then
        .Range(.Cells(rZelle.Row + 1, 1), .Cells(.Rows.Count, 1)).EntireRow.Delete
    End If
End With
End Sub
Gruß Tino

Anzeige
Danke Tino,...owT
05.12.2012 20:27:36
Matze,Matthias

Danke für die Intersect-Erklärung! owT.
06.12.2012 08:37:38
Klaus
.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige