Microsoft Excel

Herbers Excel/VBA-Archiv

Zeilen automatisch ausblenden

Betrifft: Zeilen automatisch ausblenden von: Gira Sol
Geschrieben am: 28.04.2014 17:07:14

Hallo liebes Forum,

nachdem ihr mir letzte Woche schon super weitergeholfen habt, hab ich noch eine letzte Frage, damit meine Datei so funktioniert, wie ich es mir wünsche.

Der bisherige Code lautet:

Private Sub Worksheet_Calculate()
  Static dSaved As Double
  Dim lCol As Long
  If dSaved <> Range("AO53").Value Then
    dSaved = Range("AO53").Value
    For lCol = 9 To 39
      Cells(53, lCol).EntireColumn.Hidden = (Cells(53, lCol) = 0)
    Next lCol
    
    With ActiveSheet.PageSetup
      If Range("A1:AO78").Height > Range("A1:AO78").Width Then
        .Orientation = xlPortrait
      Else
        .Orientation = xlLandscape
      End If
    End With
  End If
End Sub
Dieser gesamte Code bezieht sich auf das Tabellenblatt1.
Jetzt möchte ich, dass zusätzlich zum Ausblenden der o.g. Spalten auch immer ins Tabellenblatt2 geschaut wird und dort alle Zeilen ausgeblendet werden, die aktuell in der Spalte B "NEIN" vermerkt haben.

Wahrscheinlich ganz einfach, oder? Aber wie sage ich's in VBA?
Bereits im Voraus vielen Dank und viele Grüße
girasol

  

Betrifft: Mal ein paar Fragen dazu von: Matze Matthias
Geschrieben am: 28.04.2014 19:21:50

Hallo Gira,

ich tue mich mit dem Calculate Ereignis schwer, hätte ich nicht genommen.

Entweder über einen Button steuern oder mit dem Change Ereignis
Das gleiche gilt dann auch für Tabelle 2.
Wie blendest du denn die Zeilen oder die Spalten wieder ein?

Im Makro von dir hast du Cells(53, lCol) = 0) benutzt - also nur wenn auch eine 0 dort ist!
Es soll nix passieren wenn die Zelle "" (Leer) ist? Stehen dort Formeln drin?
Einfacher für uns ist es wenn die Datei eingestellt würde oder diese als Mustervorlage
in abgespeckter Form.

Gruß Matze


  

Betrifft: AW: Mal ein paar Fragen dazu von: Gira Sol
Geschrieben am: 29.04.2014 10:05:39

Hallo Matze,

die Variante mit "ICol" wurde mir hier im Forum empfohlen und ich muss sagen, es funktioniert super - passt also.

Ich habe es mal grob probiert darzustellen, wie ich es brauche:

Private Sub Worksheet_Calculate()
  Static dSaved As Double
  Dim lCol As Long
  
  If dSaved <> Range("AO53").Value Then
    dSaved = Range("AO53").Value
    For lCol = 9 To 39
      Cells(53, lCol).EntireColumn.Hidden = (Cells(53, lCol) = 0)
    Next lCol
    
    Sheets("service delivery model").Select
    
    Cells.EntireRow.Hidden = False
   
    Dim intZeile As Integer
   
    For intZeile = 8 To 62
    If Cells(intZeile, 2) = "NEIN" Then
    Columns(intZeile).EntireRow.Hidden = True
    End If
    Next
    
    Sheets("cost calculation").Select        

    With ActiveSheet.PageSetup
      If Range("A1:AO78").Height > Range("A1:AO78").Width Then
        .Orientation = xlPortrait
      Else
        .Orientation = xlLandscape
      End If
    End With
    
  End If
  
End Sub
Aber leider funktioniert das nicht wie gewünscht.
Das Makro blendet mir dann nicht wie gewünscht auf dem 2. Tabellenblatt erst alle Zeilen ein und selektiert dann, dass nur die mit "NEIN" ausgeblendet werden, sondern bleibt auf dem 1. Tabellenblatt und blendet dort alle Zeilen ein.

Wie muss ich in VBA sagen, dass sich dieser Teil des Codes auf das 2. Tabellenblatt bezieht?
Kann ich diesen Teil des Codes auch mit in die 1. If-Schleife integrieren?
Wo in VBA muss der Code stehen? Unter "Diese Arbeitsmappe"?

Wie ihr seht, bin ich in VBA nicht wirklich fit, daher schon mal vielen Dank für die Unterstützung.

Viele Grüße
girasol


  

Betrifft: Hab Schichtrythmus,... von: Matze Matthias
Geschrieben am: 29.04.2014 17:26:56

Hallo Gir,
..und somit nicht immer Zeit hier rein zu schauen.
Wenn du Fragen hast (weitere), dann markiere wo du auch deinen Beitrag schreibst das Kästchen
(neben Passwort) für "offen", dann sehen das Alle Helfer(innen).

Hab das Calculate Ereignis in das Activate Ereignis umgetauft,
somit wird nun der Code ausgeführt sobald du diese Tabelle aktivierst.

Private Sub Worksheet_Activate() 'Calculate
  Static dSaved As Double
  Dim lCol As Long
  Dim intZeile As Long

  Application.ScreenUpdating = False

  If dSaved <> Range("AO53").Value Then
    dSaved = Range("AO53").Value

    For lCol = 9 To 39
      Cells(53, lCol).EntireColumn.Hidden = (Cells(53, lCol) = 0)
    Next lCol

        With Tabelle2 'Sheets("service delivery model") ANPASSEN
        .Cells.EntireRow.Hidden = False

            For intZeile = 8 To 62
                If .Cells(intZeile, 2).Value = "Nein" Then
                .Cells(intZeile, 2).Rows.Hidden = True
                End If
            Next
        End With

    With ActiveSheet.PageSetup
      If Range("A1:AO78").Height > Range("A1:AO78").Width Then
        .Orientation = xlPortrait
      Else
        .Orientation = xlLandscape
      End If
    End With

  End If

End Sub
Teste das mal, ich hab da keine Lust auch noch eine Datei zu basteln.
Das ist deine Aufgabe,...

Gruß Matze


 

Beiträge aus den Excel-Beispielen zum Thema "Zeilen automatisch ausblenden"