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

Alles ausserh. Druckbereich im ganzen WB löschen

Alles ausserh. Druckbereich im ganzen WB löschen
13.08.2006 20:58:36
Peter
Guten Abend
Matthias G hat mir am 21.07.2006 den nachstehenden Code geliefert, der im aktiven Sheet alle Bereiche ausserhalb des Druckbereichs löscht.
Das funktioniert so problemlos in einer einzelnen Tabelle; allerdings möchte ich den Code so erweitern, dass dieser Löschvorgang in sämtlichen Tabellen des jeweiligen Workbooks ausgeführt wird.
Ich habe verschiedene Versuche gestartet, diesen Code soweit zu modifizieren, leider erfolglos. Kann mir jemand weiterhelfen?
Danke, Peter
PS: Spielt es eine Rolle, ob ich mit dem deutschen Excel (Druckbereich) oder einer englischen Version (PrintArea) arbeite?

Sub AllesAusserDruckbereichLöschen()
Dim db As Range
Dim ez As Long, lz As Long, es As Integer, ls As Integer
Set db = Range(ActiveSheet.PageSetup.PrintArea)
If db.Areas.Count > 1 Then
MsgBox "bei mehreren Bereichen nicht möglich!"
Exit Sub
End If
ez = db(1).Row
es = db(1).Column
lz = db(db.Count).Row
ls = db(db.Count).Column
Debug.Print ez, es, lz, ls
'unterhalb löschen:
Rows(lz + 1 & ":" & Rows.Count).Delete
'rechts löschen:
Range(Cells(1, ls + 1), Cells(1, Columns.Count)).EntireColumn.Delete
'links löschen:
If es > 1 Then _
Range(Cells(1, 1), Cells(1, es - 1)).EntireColumn.Delete
'oben löschen:
If ez > 1 Then _
Rows("1:" & ez - 1).Delete
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Alles ausserh. Druckbereich im ganzen WB lösch
13.08.2006 22:09:18
Josef
Hallo Peter!
Das sollte es tun.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub AllesAusserDruckbereichLöschen()
Dim objWS As Worksheet
Dim rng As Range
Dim lngFirst As Long, lngLast As Long
Dim intFirst As Integer, intLast As Integer

On Error GoTo ErrExit

GetMoreSpeed

For Each objWS In ThisWorkbook.Worksheets
  
  With objWS
    
    Set rng = .Range(.PageSetup.PrintArea)
    
    If Not rng Is Nothing Then
      
      If rng.Areas.Count = 1 Then
        
        lngFirst = rng(1).Row
        intFirst = rng(1).Column
        lngLast = rng(rng.Count).Row
        intLast = rng(rng.Count).Column
        
        If lngLast < .Rows.Count Then .Range(.Cells(lngLast + 1, 1), .Cells(.Rows.Count, .Columns.Count)).Delete
        If lngFirst > 1 Then .Range(.Cells(1, 1), .Cells(lngFirst - 1, .Columns.Count)).Delete
        If intLast < .Columns.Count Then .Range(.Cells(1, intLast + 1), .Cells(.Rows.Count, .Columns.Count)).Delete
        If intFirst > 1 Then .Range(.Cells(1, 1), .Cells(.Rows.Count, intFirst - 1)).Delete
        
      End If
      
    End If
    
  End With
  
Next

ErrExit:

GetMoreSpeed 0

Set rng = Nothing
End Sub


Sub GetMoreSpeed(Optional ByVal Modus As Integer = 1)
Static lngCalc As Long

With Application
  If Modus = 1 Then
    lngCalc = .Calculation
    .ScreenUpdating = False
    .EnableEvents = False
    .DisplayAlerts = False
    .Calculation = -4135
    .Cursor = xlWait
  Else
    .ScreenUpdating = True
    .EnableEvents = True
    .DisplayAlerts = True
    .Calculation = IIf(lngCalc > 0, lngCalc, -4105)
    .Cursor = xlDefault
  End If
End With

End Sub


Gruß Sepp

Anzeige
AW: Alles ausserh. Druckbereich im ganzen WB lösch
14.08.2006 08:18:22
Peter
Hallo Sepp
Das läuft so einwandfrei.
Besten Dank!
Peter
AW: Alles ausserh. Druckbereich im ganzen WB löschen
13.08.2006 22:20:24
Luschi
Hallo Peter,
so geht's in allen Tabellen:
Sub AllesAusserDruckbereichLöschen()
Dim wb As Workbook, wsh As Worksheet, db As Range
Dim ez As Long, lz As Long, es As Integer, ls As Integer
Set wb = ThisWorkbook
For Each wsh In wb.Worksheets
Set db = wsh.Range(wsh.PageSetup.PrintArea)
If db.Areas.Count > 1 Then
Set wsh = Nothing
Set db = Nothing
Set wb = Nothing
MsgBox "bei mehreren Bereichen nicht möglich!"
Exit Sub
End If
ez = db(1).Row
es = db(1).Column
lz = db(db.Count).Row
ls = db(db.Count).Column
Debug.Print ez, es, lz, ls
'unterhalb löschen:
wsh.Rows(lz + 1 & ":" & wsh.Rows.Count).Delete
'rechts löschen:
wsh.Range(Cells(1, ls + 1), Cells(1, Columns.Count)).EntireColumn.Delete
'links löschen:
If es > 1 Then _
wsh.Range(Cells(1, 1), Cells(1, es - 1)).EntireColumn.Delete
'oben löschen:
If ez > 1 Then _
wsh.Rows("1:" & ez - 1).Delete
Next wsh
Set wsh = Nothing
Set db = Nothing
Set wb = Nothing
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Alles ausserh. Druckbereich im ganzen WB löschen
Orakel
Hallo,
kannst Du mir den Code mal ein klein wenig auskommentieren? Man sollte ja wissen, was man macht. ;-)
AW: Alles ausserh. Druckbereich im ganzen WB löschen
14.08.2006 08:23:17
Peter
Hallo Luschi
Vielen Dank für den Beitrag.
Beim Testen erscheint bei mir folgende Meldung:
"Laufzeitfehler '1004': Die Methode 'Range' für das Objekt '_Worksheet ist fehlgeschlagen"
Beim Debuggen wird folgender Code markiert:
wsh.Rows(lz + 1 & ":" & wsh.Rows.Count).Delete
'rechts löschen:
wsh.Range(Cells(1, ls + 1), Cells(1, Columns.Count)).EntireColumn.Delete
Interessant ist, dass die Aktion im ersten Worksheet korrekt ausgeführt wird und es dann im zweiten nicht mehr klappt.
Ich habe allerdings von Sepp bereits eine funktionierende Lösung erhalten, so dass ich dich nicht weiter bemühen will.
Freundlicher Gruss
Peter
Anzeige
AW: Alles ausserh Druckbereichim ganzen WB löschen
13.08.2006 22:24:41
Daniel
Hallo
in der einfachsten (aber nicht elegantesten) Variante so (eigefügter Code ist mit --- gekennzeichnet):

Sub AllesAusserDruckbereichLöschen()
Dim db As Range
Dim ez As Long, lz As Long, es As Integer, ls As Integer
--- Dim sh as worksheet
--- for each sh in activeworkbook.sheets
--- sh.select
Set db = Range(ActiveSheet.PageSetup.PrintArea)
If db.Areas.Count > 1 Then
MsgBox "bei mehreren Bereichen nicht möglich!"
Exit Sub
End If
ez = db(1).Row
es = db(1).Column
lz = db(db.Count).Row
ls = db(db.Count).Column
Debug.Print ez, es, lz, ls
'unterhalb löschen:
Rows(lz + 1 & ":" & Rows.Count).Delete
'rechts löschen:
Range(Cells(1, ls + 1), Cells(1, Columns.Count)).EntireColumn.Delete
'links löschen:
If es > 1 Then _
Range(Cells(1, 1), Cells(1, es - 1)).EntireColumn.Delete
'oben löschen:
If ez > 1 Then _
Rows("1:" & ez - 1).Delete
--- mext
End Sub

Gruß, Daniel
Anzeige
AW: Alles ausserh Druckbereichim ganzen WB löschen
Orakel
Hallo,
kannst Du mir den Code mal ein klein wenig auskommentieren? Man sollte ja wissen, was man macht. ;-)
AW: Alles ausserh Druckbereichim ganzen WB löschen
14.08.2006 11:33:12
daniel
Hallo
das ganze basiert auf der
For each EINZELOBJEKT in OBJEKTGRUPPE ... NEXT - Schleife.
dabei werden in diesem Fall alle Arbeitsblätter (Sheets) der Datei (Workbook) druchlaufen.
Zum Schleifenbeginn wird das jeweilige Arbeisblatt aktiviert, ist somit das ACTIVESHEET.
Damit läuft der bestehende Code ohne weitere Änderungen.
Ist zwar nicht unbedingt guter Code, aber funktioniert in diesem Fall mit dem geringsten Aufwand.
Gruß, Daniel Eiser

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige