• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Afwisselend diverse rijen laten zien/verbergen

Status
Niet open voor verdere reacties.

trainers

Verenigingslid
Lid geworden
8 feb 2012
Berichten
156
Naar aanleiding van post #4 (van VenA) in deze thread https://www.helpmij.nl/forum/showthread.php/939481-Kolommen-verbergen-op-basis-van-gefilterde-waarde
werd ik getriggerd om het volgende aan jullie voor te leggen.

Heb geprobeerd de code te begrijpen c.q. te vertalen naar rijen. Is mij helaas nog niet gelukt.

Onderstaande code werkt al jaren prima (uiteraard gaat het laten zien van alle rijen supersnel) maar omgekeerd duurt het rij voor rij aflopen om te kijken of deze verborgen moet worden wat langer).
Natuurlijk niet een echt probleem maar toch.

Toelichting:
Range("toggle_rows") heeft afwisselend de waarde 0 of 1. Afhankelijk van wat de laatste actie was.
Range("check_printing") geeft een waarde 1 als alles klopt, waarde 0 als er ergens in kolom E een #N/B voorkomt.
De waarde in kolom E (0 of 1) wordt bepaald door formules. Volledig afhankelijk van diverse factoren. Een patroon is er gewoon niet".
De Timer heb ik in het voorbeeld toegevoegd.

Code:
Option Explicit
Option Private Module
Dim LastRow As Long
Dim iRow As Integer
Dim tTimer As Single

Sub Rows_Visible_Invisible() 'TOGGLE: Laat afwisselend diverse rijen zien/verbergen van blad PUBLICATIE"
    tTimer = Timer
    LastRow = Cells(Rows.Count, 5).End(xlUp).Row  'in de regel rond de 2500 rijen
    
    Application.ScreenUpdating = False
        Sheets("PUBLICATIE").Activate
        If Range("toggle_rows") = 1 Then
            Rows(2 & ":" & LastRow).EntireRow.Hidden = False
            Range("toggle_rows") = 0
            Application.Goto Cells(1, 1), Scroll:=True
        Else
            If Range("check_printing") = 1 Then
                For iRow = 2 To LastRow
                    If Range("E" & iRow) = 0 Then
                        Rows(iRow).EntireRow.Hidden = True
                    End If
                Next
                Range("toggle_rows") = 1
                Application.Goto Cells(1, 1), Scroll:=True
            Else:
                MsgBox Title:="HELPMIJ.NL", Buttons:=vbInformation, prompt:="OEPS!" & vbNewLine & "Iets klopt er niet." _
                & vbNewLine & vbNewLine & "Ckeck kolom E op #N/B. Kijk in kolom A naar het wedstrijdnummer en zoek de wedstrijd op in het tabblad" _
                & vbNewLine & "OVERZICHT." & vbNewLine & vbNewLine & "Corrigeer de fout en probeer het opnieuw."
            End If
        End If
    Application.ScreenUpdating = True
    MsgBox "Uitgevoerd in " & Round(Timer - tTimer, 2) & " sec.", vbInformation, Application.Username
End Sub

In de regel / gemiddeld staan er in kolom E ca. 2500 nullen of eenen.
In het voorbeeld heb ik een paar 0 en 1 in de eerste rijen gezet.

Hoe kan ik versnellen c.q. de code van VenA toepassen?
Bekijk bijlage Map1.xlsm
 
Met autofilter (zet in cel E1 een koptekst).
Met een togglebutton van de activeX-controls.

Code:
Private Sub ToggleButton1_Click()
If ToggleButton1 Then
   Columns(5).AutoFilter 1, 1, , , 0
 Else
   ShowAllData
 End If
End Sub
 
Ik zie niets terug van de code uit het vorige draadje. Het verbergen van kolommen is wat lastiger dan het verbergen van rijen. Er bestaan geen kolomfilters.

Als je de code begrepen had dan had je er zoiets van kunnen maken
Code:
Sub VenA()
  Dim r As Range
  For Each cl In Columns(5).SpecialCells(2, 1)
    If cl.Value = 0 Then
      If r Is Nothing Then Set r = cl Else Set r = Union(r, cl)
    End If
  Next cl
  If Not r Is Nothing Then r.EntireRow.Hidden = True
End Sub
 
@VenA:
Als je de MsgBox bedoelt klopt dat. :) De code van deze Sub is al enkele jaren oud en had ik nog niet aangepast.

Als je de code begrepen had dan had je er zoiets van kunnen maken
Zoals ik al schreef in #1 Heb geprobeerd de code te begrijpen c.q. te vertalen naar rijen. Is mij helaas nog niet gelukt.

Beiden mijn dank. Ik ga eens kijken hoe ik e.e.a. kan inbouwen in het originele bestand.
 
Volgens mij heb ik nergens over een msgbox. Als je code niet begrijpt dan gaat het nog een klus worden om het in te bouwen in het originele bestand.
 
Sorry VenA maar jij schreef "Ik zie niets terug van de code uit het vorige draadje." en ik dacht dat je de MsgBox bedoelde. Excuus.
 
Heb er dit van gemaakt:
Code:
For Each cl In Columns(5).SpecialCells(xlCellTypeFormulas, 1)
en cl gedeclareerd als Variant.

Werkt als een zonnetje. Mijn dank. :thumb:
 
Dim cl as range.

De autofiltermethode lijkt me de beste.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan