Microsoft Excel

Herbers Excel/VBA-Archiv

Leere Zeilen nicht drucken. Makro optimieren | Herbers Excel-Forum


Betrifft: Leere Zeilen nicht drucken. Makro optimieren von: chandler
Geschrieben am: 04.01.2012 14:10:20

Hallo,

das Makro durchsucht Bereiche und blendet Zeilen aus, wenn in Spalte C die Zellen leer sind um dann das Blatt zu drucken.

Sub print_n()
Dim iCol As Integer

Dim i As Integer
Dim iRow As Integer
Dim iRowL As Integer

Dim i2 As Integer
Dim iRow2 As Integer
Dim iRowL2 As Integer

iCol = 3

iRow = 34 '1. Bereich
iRowL = 38 

iRow2 = 40 '2. Bereich
iRowL2 = 44

For i = iRow To iRowL
If Cells(i, iCol) = 0 Then Rows(i).EntireRow.Hidden = True
If Cells(i, iCol) = 0 Then Rows(i + 1).EntireRow.Hidden = True
Next

For i2 = iRow2 To iRowL2
If Cells(i2, iCol) = 0 Then Rows(i2).EntireRow.Hidden = True
If Cells(i2, iCol) = 0 Then Rows(i2 + 1).EntireRow.Hidden = True
Next

'Drucken

For i = iRow To iRowL + 1
If Rows(i).Hidden = True Then Rows(i).EntireRow.Hidden = False
Next

For i2 = iRow2 To iRowL2 + 1
If Rows(i2).Hidden = True Then Rows(i2).EntireRow.Hidden = False
Next
End Sub
Das Makro ist eine optische Katastrophe und sehr langsam.

Weis jemand wie man das Makro optimieren kann?

Vorab vielen Dank. Grüße chandler

  

Betrifft: AW: Leere Zeilen nicht drucken. Makro optimieren von: Josef Ehrensberger
Geschrieben am: 04.01.2012 14:21:35


Hallo Chandler,

Sub print_n()
  Dim rng As Range
  Dim lngCol As Long, lngIndex As Long, lngStart As Long, lngEnd As Long
  
  lngCol = 3
  lngStart = 34 '1. Bereich
  lngEnd = 38
  
  For lngIndex = lngStart To lngEnd
    If Cells(lngIndex, lngCol) = 0 Then
      If rng Is Nothing Then
        Set rng = Rows(lngIndex)
      Else
        Set rng = Union(rng, Rows(lngIndex))
      End If
    End If
    If Cells(lngIndex + 6, lngCol) = 0 Then
      If rng Is Nothing Then
        Set rng = Rows(lngIndex)
      Else
        Set rng = Union(rng, Rows(lngIndex))
      End If
    End If
  Next
  
  If Not rng Is Nothing Then rng.EntireRow.Hidden = True
  
  'Drucken
  
  Range(Cells(lngStart, 1), Cells(lngEnd + 6, 1)).EntireRow.Hidden = False
  
End Sub






« Gruß Sepp »



  

Betrifft: AW: Leere Zeilen nicht drucken. Makro optimieren von: serge
Geschrieben am: 04.01.2012 14:24:12

Hallo Chandler

Sub print_n()
Application.ScreenUpdating = False
dein Makro.......
Application.ScreenUpdating = True
End Sub
Sollte schon Verbessung bringen!
Gruss Serge


  

Betrifft: AW: Leere Zeilen nicht drucken. Makro optimieren von: Rudi Maintaire
Geschrieben am: 04.01.2012 14:28:39

Hallo,
wirklich leer? Dann so:

Sub xxx()
  Dim Rng As Range
  Application.ScreenUpdating = False
  
  On Error Resume Next
  Set Rng = Range("C34:C38,C40:C44").SpecialCells(xlCellTypeBlanks).EntireRow
  On Error GoTo 0
  
  If Not Rng Is Nothing Then Rng.Hidden = True
  'Drucken
  If Not Rng Is Nothing Then Rng.Hidden = False
  
End Sub

Gruß
Rudi


  

Betrifft: Echt super! Vielen Dank von: chandler
Geschrieben am: 04.01.2012 14:54:02

Hallo an Alle,

vielen Dank.

Beide Makros funktionieren.

Grüße chandler


  

Betrifft: Nachgefragt: Bereich Rng erweitern von: chandler
Geschrieben am: 04.01.2012 15:15:24

Hallo,

wie könnte man den Bereich Rng, im Falle If Not Rng Is Nothing, um eine Zeile nach unten erweitern. Selbstverständlich auch wieder einblenden nach dem Drucken?

Vorab vielen Dank. Grüße chandler


  

Betrifft: AW: Nachgefragt: Bereich Rng erweitern von: Rudi Maintaire
Geschrieben am: 04.01.2012 15:43:24

Hallo,
um eine Zeile nach unten erweitern
wir meinst du das?
Rng besteht möglicherweise aus lauter einzelnen Zeilen (34, 36, 38, 40, 42, 44)
Willst du die leeren und die darunter liegenden Zeilen ausblenden?

Gruß
Rudi


  

Betrifft: AW: Nachgefragt: Bereich Rng erweitern von: chandler
Geschrieben am: 04.01.2012 16:07:02

Hallo Rudi,

vielen Dank für die Antwort.

Ich habe das Problem erst auf den zweiten Blick gemerkt, und komme nicht weiter:

Das Problem mit der Zusatzzeile, wie im Ursprungsmakro:


For i = iRow To iRowL
If Cells(i, iCol) = 0 Then Rows(i).EntireRow.Hidden = True
If Cells(i, iCol) = 0 Then Rows(i + 1).EntireRow.Hidden = True

Next

Wenn die einzelnen Zeilen 34, 35, 36, 37, 38 leer (geprüft wird in Spalte C) sind, sollen die entsprechende Zeilen ausgeblendet werden.

Wenn, aber alle leer sind (34 bis 38) soll auch die Zeile 39 ausgeblendet werden, ist nämlich die Summe davon.


Das gleiche in Bereich der Zeilen 40 bis 44 wenn alle leer (geprüft wird in der Spalte C), dann soll auch die Zeile 45 ausgeblendet werden.

Vielen Dank. Grüße chandler


  

Betrifft: AW: Nachgefragt: Bereich Rng erweitern von: Josef Ehrensberger
Geschrieben am: 04.01.2012 16:28:36


Hallo Chandler,

Sub print_n()
  Dim rng1 As Range, rng2 As Range
  Dim lngCol As Long, lngIndex As Long, lngStart As Long, lngEnd As Long
  
  lngCol = 3
  lngStart = 34 '1. Bereich
  lngEnd = 38
  
  For lngIndex = lngStart To lngEnd
    If Cells(lngIndex, lngCol) = 0 Then
      If rng1 Is Nothing Then
        Set rng1 = Rows(lngIndex)
      Else
        Set rng1 = Union(rng1, Rows(lngIndex).Resize(IIf(rng1.Rows.Count = 4 And lngIndex = lngEnd, 2, 1)))
      End If
    End If
    If Cells(lngIndex + 6, lngCol) = 0 Then
      If rng2 Is Nothing Then
        Set rng2 = Rows(lngIndex + 6)
      Else
        Set rng2 = Union(rng2, Rows(lngIndex + 6).Resize(IIf(rng2.Rows.Count = 4 And lngIndex = lngEnd, 2, 1)))
      End If
    End If
  Next
  
  If Not rng1 Is Nothing Then rng1.EntireRow.Hidden = True
  If Not rng2 Is Nothing Then rng2.EntireRow.Hidden = True
  
  'Drucken
  
  Range(Cells(lngStart, 1), Cells(lngEnd + 7, 1)).EntireRow.Hidden = False
  
End Sub






« Gruß Sepp »



  

Betrifft: Das war' s! Funktioniert bestens von: chandler
Geschrieben am: 04.01.2012 17:42:11

Hallo Sepp,

Prima. Funktioniert bestens.

Vielen Dank. Grüße chandler


Beiträge aus den Excel-Beispielen zum Thema "Leere Zeilen nicht drucken. Makro optimieren"