Anzeige
Archiv - Navigation
1244to1248
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

Leere Zeilen nicht drucken. Makro optimieren

Leere Zeilen nicht drucken. Makro optimieren
chandler
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
AW: Leere Zeilen nicht drucken. Makro optimieren
04.01.2012 14:21:35
Josef

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 »

Anzeige
AW: Leere Zeilen nicht drucken. Makro optimieren
04.01.2012 14:24:12
serge
Hallo Chandler
Sub print_n()
Application.ScreenUpdating = False
dein Makro.......
Application.ScreenUpdating = True
End Sub
Sollte schon Verbessung bringen!
Gruss Serge
AW: Leere Zeilen nicht drucken. Makro optimieren
04.01.2012 14:28:39
Rudi
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
Anzeige
Echt super! Vielen Dank
04.01.2012 14:54:02
chandler
Hallo an Alle,
vielen Dank.
Beide Makros funktionieren.
Grüße chandler
Nachgefragt: Bereich Rng erweitern
04.01.2012 15:15:24
chandler
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
AW: Nachgefragt: Bereich Rng erweitern
04.01.2012 15:43:24
Rudi
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
AW: Nachgefragt: Bereich Rng erweitern
04.01.2012 16:07:02
chandler
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
Anzeige
AW: Nachgefragt: Bereich Rng erweitern
04.01.2012 16:28:36
Josef

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 »

Anzeige
Das war' s! Funktioniert bestens
04.01.2012 17:42:11
chandler
Hallo Sepp,
Prima. Funktioniert bestens.
Vielen Dank. Grüße chandler

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige