• 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.

Kolommen verbergen/zichtbaar maken op basis van kolomnaam

Status
Niet open voor verdere reacties.
Oké, had ik niet voorzien, maar columns.count is onbetrouwbaar.
Pak een leeg blad en vul eens alleen in cel E1 iets in.
Code:
msgbox Chr(ActiveSheet.UsedRange.Columns.Count + 65)


Ps.
Onderstaande lijkt me betrouwbaarder.
Code:
If ToggleButton1 Then Range("A3", Cells(3, Columns.Count).End(xlToLeft)).Name = "bereik"
    For Each cl In Range("bereik")
 
Laatst bewerkt:
Nog twee wat snellere varianten

Code:
Private Sub ToggleButton1a_Click()
Dim u As Range, cl As Range
  For Each cl In Rows(3).SpecialCells(2)
    If InStr(1, "M2 M3 P5 U7 U8", cl.Value) > 0 Then
      If u Is Nothing Then Set u = cl Else Set u = Union(u, cl)
    End If
  Next cl
  If Not u Is Nothing Then u.Columns.Hidden = Not u.Columns.Hidden
  ToggleButton1.Caption = IIf(ToggleButton1, "Tonen", "Verbergen")
End Sub

of

Code:
Private Sub ToggleButton1_Click()
Dim u As Range, j As Long
ar = Cells(3, 1).Resize(, UsedRange.Columns.Count)
  For j = 1 To UBound(ar, 2)
    If ar(1, j) <> "" And InStr("M2 M3 P5 U7 U8", ar(1, j)) > 0 Then
     If u Is Nothing Then Set u = Columns(j) Else Set u = Union(u, Columns(j))
    End If
  Next j
  If Not u Is Nothing Then u.Columns.Hidden = Not u.Columns.Hidden
  ToggleButton1.Caption = IIf(ToggleButton1, "Tonen", "Verbergen")
End Sub
 
Toelichting op mijn vorige reactie voor VenA.
Code:
msgbox Cells(3, 1).Resize(, UsedRange.Columns.Count).address

Dan zou je dit moeten gebruiken.
Code:
Cells(3, 3).Resize(, UsedRange.Columns.Count - 1)
 
Laatst bewerkt:
Moet je ook niet als eerste een berichtje plaatsen op een nieuwe pagina plaatsen:d Dus niet gezien:eek: Gewoon in A1 beginnen en dan verder naar rechts en beneden:d
 
Tja, waren ze maar allemaal zoals jij moest zijn. :d:d:d:d:d:d

Is hier in het gronings een gezegde die niet veel zegt.
 
Edmoor, hij werkt voor mij, bedankt.
HSV: de tweede code van #21: waar plaats ik die in de code van Edmoor (wat dat is dan toch de bedoeling neem ik aan)?
Ik ga vanavond ook de codes van VenA nog bekijken (maar snappen?).

Nog een vraag over de button. Deze wil ik graag op een vaste plaats in de tabel hebben, zodat deze niet verschuift wanneer de kolommen verborgen/getoond worden. Is dat een eigenschap die instelbaar is? Dat kan namelijk wel bij een vorm geplaatst via INVOEGEN-VORMEN waar dan een macro aanhangt. Hier kun je de optie instellen "Niet gerelateerd aan cellen".
 
Beste mensen,
de oplossing van mijn vraag in #26 heb ik gevonden.
Kan ik onderstaande code van VenA ook in een module plaatsen ( als gewone Sub ()). Mij lukt het iig niet.

Code:
Private Sub ToggleButton1_Click()
Dim u As Range, j As Long
ar = Cells(3, 1).Resize(, UsedRange.Columns.Count)
  For j = 1 To UBound(ar, 2)
    If ar(1, j) <> "" And InStr("M2 M3 P5 U7 U8", ar(1, j)) > 0 Then
     If u Is Nothing Then Set u = Columns(j) Else Set u = Union(u, Columns(j))
    End If
  Next j
  If Not u Is Nothing Then u.Columns.Hidden = Not u.Columns.Hidden
  ToggleButton1.Caption = IIf(ToggleButton1, "Tonen", "Verbergen")
End Sub
 
Nee, die hoort in de module van het blad waar de togglebutton staat, maar die code is niet helemaal goed als je de berichten doorleest.
En dan vooral de msgbox coderegel proberen die ik schetste.
 
Een togglebutton is een active X element, als je een togglebutton (wisselknop) wilt gebruiken:
Ga naar het tabblad ontwikkelaars -> Invoegen -> onderste venstertje -> (wisselknop) togglebutton.
 
Ok.
HSV, heb je mijn vraag in #26 gelezen? De regel die jij aangeeft moet in de code ergens in de code van Edmoor geplaatst worden. Maar waar?
Ik gebruik nu de 2e code van van VenA. Geldt daar ook voor dat die niet betrouwbaar is?
En, die regel met msgbox: echt, ik begrijp niet wat ik hiermee moet doen.

Dan nog voor mijn begrip: is een code een private sub aan te roepen vanuit een andere module?
 
Ja, die heb ik wel gelezen hoor, maar die lijkt me overbodig.

De eerste van VenA is het betrouwbaarst en sneller dan die van Edmoor.
En dat komt doordat je niet in kolom A begint.
De winst op de snelheid wordt gepakt doordat alle kolommen in een keer verborgen of weer zichtbaar worden, en niet een voor een.

De regel met de msgbox kan je zo testen.
Code:
sub x()
msgbox Cells(3, 1).Resize(, UsedRange.Columns.Count).address
end sub
En zie dat daar een verkeerd adres uit voortvloeit.

Om je vraag te beantwoorden over die twee regels.
Code:
 Private Sub ToggleButton1_Click()[COLOR=#0000ff]   
 If ToggleButton1 Then Range("A3", Cells(3, Columns.Count).End(xlToLeft)).Name = "bereik"[/COLOR]
[COLOR=#0000ff]      For Each cl In Range("bereik")[/COLOR]
        If cl.Value <> "" And InStr(1, "M2 M3 P5 U7 U8", cl.Value) > 0 Then
            Columns(cl.Column).Hidden = Not Columns(cl.Column).Hidden
        End If
    Next cl
    ToggleButton1.Caption = IIf(ToggleButton1, "Tonen", "Verbergen")
End Sub

Zoals eerder geschreven moet de code staan in de module van het blad waar de Togglebutton staat.

Wat betreft je nieuwe vraag; dat kan wel, maar ligt eraan wat het doel is.
 
Laatst bewerkt:
Ok Harry, dank voor uitgebreide antwoord.
De eerste code van VenA is het snelst. Maar kun je uitleggen wat "SpelcialCells(2)" in de volgende regel van deze code aangeeft?
Code:
For Each cl In Rows(3).SpecialCells(2)
 
Hallo Edmoor,
...... ik heb gisteren ik weet niet hoelang uit proberen te vogelen waar die (2) nu betrekking op heeft. Ik ging er vanuit dat daarmee een klom of rij mee werd aangeduid. Maar het geeft dus aan dat de celwaarde een tekstwaarde is.
 
Precies. Het is dus de bedoeling lege cellen over te slaan. Het geeft alleen de cellen terug die een waarde bevatten.
Uiteraard is iedereen hier bereid vragen te beantwoorden, maar als je SpecialsCells in Google intikt vind je direct de sites waar dergelijke dingen beschreven staan.
 
Laatst bewerkt:
nog voor wat betreft mijn laatste vraag in #30 en het antwoord/opmerking hierop van Harry in #31:
met een Module-code (Sub ()) extraheer ik data uit een brontabel en plaats deze in een ander tabblad. Daarbij zou ik graag de betreffende kolommen standaard verborgen willen hebben. Dus moet de Private () vanuit een Sub () aangeroepen worden.
Voor jullie, specialisten, druk ik me waarschijnlijk ongelofelijk knullig uit. Maar begrijpen jullie me?
 
Wij hebben het ook eens moeten leren ;)

Het woord Private heeft overigens niets met het aanroepen van de Sub te maken maar met zijn Exposure in het project.
Dat laten we maar even achterwege want is voor je vraag niet van belang.

Een Sub kan altijd vanuit een andere Sub worden aangeroepen met Call NaamVanDeSub
Uiteraard gelden daar ook weer regels en die zijn dan weer afhankelijk van de aanroepende Sub en de structuur van de aangeroepen Sub.
 
Laatst bewerkt:
.. ja maar,
de module met de toggle button om de kolommen te verbergen/tonen staan in een module van het tabblad, aanhef Private Sub ToggleButton (). Deze Private Sub moet worden aangeroepen vanuit een toegevoegde module die begint met Sub .... (). En dat wil ik graag. Ik begrijp dat dat kan maar hoe?
 
Hoewel ik het totaal onzin vind, toch een antwoord op je vraag.
Je kan net zo goed een change_event aanroepen.
Code:
Public toggle As Boolean
Sub VerbergenVia()
 Range("O1") = "Test"
 Sheets(1).ToggleButton1_Click
End Sub

Code:
Public Sub ToggleButton1_Click()
Dim u As Range, cl As Range
If toggle = False Then
  For Each cl In Rows(3).SpecialCells(2)
    If InStr(1, "M2 M3 P5 U7 U8", cl.Value) > 0 Then
      If u Is Nothing Then Set u = cl Else Set u = Union(u, cl)
    End If
  Next cl
  If Not u Is Nothing Then u.Columns.Hidden = Not u.Columns.Hidden
  With ToggleButton1
       toggle = True
         .Caption = IIf(.Caption = "Tonen", "Verbergen", "Tonen")
         If u.Columns.Hidden Then .Value = True
  End With
 toggle = False
 End If
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan