Ga naar inhoud

CommandButton die cellen verbergen/zichtbaar maakt


Filip_Neyt

Aanbevolen berichten

Hallo,

 

In een facturatieprogramma heb ik gebruik gemaakt van 2 CommandButtons die ofwel bepaalde cellen verbergen of weergeven.

 

Onderstaand heb ik toegevoegd en dit werkt goed, maar nu had ik graag de range uitgebreid tot de ganse werkmap.

 

Er wordt gebruik gemaakt van verschillende sheets.

 

Private Sub CommandButton1_Click()
For Each cl In Range("A1:T" & Range("A" & Rows.Count).End(xlUp).Row)
 If cl.Interior.ColorIndex <> xlNone Then
  cl.Font.ColorIndex = cl.Interior.ColorIndex
 End If
Next
End Sub
 
Private Sub CommandButton2_Click()
For Each cl In Range("A1:T" & Range("A" & Rows.Count).End(xlUp).Row)
 If cl.Interior.ColorIndex = cl.Font.ColorIndex Then
  cl.Font.ColorIndex = xlAutomatic: cl.Font.ColorIndex = xlBold
 End If
Next
End Sub
 
 
Iedere hulp is welkom
Link naar reactie
Delen op andere sites

nu had ik graag de range uitgebreid tot de ganse werkmap.

Er wordt gebruik gemaakt van verschillende sheets.

Bedoel je voor alle cellen in alle werkbladen?  Weet je hoeveel miljoenen cellen dat zijn? Hoeveel bladen gebruik je?

Als je die opdracht geeft kun je (bij wijze van spreken) wel enkele weken met vakantie voordat die voltooid is.

Je kunt daarom beter die opdracht beperken tot een bepaald bereik in de verschillende bladen, nl. tot het bereik wat je gebruikt.

 

Met jouw macro worden overigens geen cellen verborgen (je kunt in Excel alleen hele rijen of kolommen verbergen), maar wordt de tekstkleur en celkleur aan elkaar gelijk gemaakt (en met de tweede macro weer opgeheven). Persoonlijk vind ik dat niet aan te bevelen, je moet altijd kunnen zien wat er in een cel staat (vind ik), maar als je dat beslist wil, dan kan dat wel.

Link naar reactie
Delen op andere sites

Bedoel je voor alle cellen in alle werkbladen?  Weet je hoeveel miljoenen cellen dat zijn? Hoeveel bladen gebruik je?

Als je die opdracht geeft kun je (bij wijze van spreken) wel enkele weken met vakantie voordat die voltooid is.

Je kunt daarom beter die opdracht beperken tot een bepaald bereik in de verschillende bladen, nl. tot het bereik wat je gebruikt.

 

Met jouw macro worden overigens geen cellen verborgen (je kunt in Excel alleen hele rijen of kolommen verbergen), maar wordt de tekstkleur en celkleur aan elkaar gelijk gemaakt (en met de tweede macro weer opgeheven). Persoonlijk vind ik dat niet aan te bevelen, je moet altijd kunnen zien wat er in een cel staat (vind ik), maar als je dat beslist wil, dan kan dat wel.

Oei dan vrees ik dat het niet zal lukken, heb trouwens niet genoeg verlof daarvoor. Er zijn +100 bladen aanwezig. Ik dacht dat het misschien mogelijk was met iets als 'Workbook'... maar dus toch niet.

Alvast dank voor uw antwoord.

Link naar reactie
Delen op andere sites

Het kan wel in een redelijke tijd als je de code maar beperkt tot een niet al te groot bereik.

Hieronder een voorbeeld voor het bereik A1:T50 op alle werkbladen in een workbook.

Sub macro1()
Dim cl As Range, x As Integer
For x = 1 To Sheets.Count
For Each cl In Sheets(x).Range("A1:T50")
If cl.Interior.ColorIndex <> xlColorIndexNone Then
cl.Font.ColorIndex = cl.Interior.ColorIndex
End If
Next cl
Next x
End Sub
En voor opheffing van wat met macro1 werd ingesteld:
Sub macro2()
Dim cl As Range, x As Integer
For x = 1 To Sheets.Count
For Each cl In Sheets(x).Range("A1:T50")
If cl.Interior.ColorIndex = cl.Font.ColorIndex Then
With cl.Font
.ColorIndex = xlAutomatic
.Bold = True
End With
End If
Next cl
Next x
End Sub
aangepast door alpha
Link naar reactie
Delen op andere sites

 

Het kan wel in een redelijke tijd als je de code maar beperkt tot een niet al te groot bereik.

Hieronder een voorbeeld voor het bereik A1:T50 op alle werkbladen in een workbook.

Sub macro1()
Dim cl As Range, x As Integer
For x = 1 To Sheets.Count
For Each cl In Sheets(x).Range("A1:T50")
If cl.Interior.ColorIndex <> xlColorIndexNone Then
cl.Font.ColorIndex = cl.Interior.ColorIndex
End If
Next cl
Next x
End Sub
En voor opheffing van wat met macro1 werd ingesteld:
Sub macro2()
Dim cl As Range, x As Integer
For x = 1 To Sheets.Count
For Each cl In Sheets(x).Range("A1:T50")
If cl.Interior.ColorIndex = cl.Font.ColorIndex Then
With cl.Font
.ColorIndex = xlAutomatic
.Bold = True
End With
End If
Next cl
Next x
End Sub

 

Hartstikke dank Alpha, ik probeer deze zsm uit en laat u wat weten.

Fijne dag verder

Link naar reactie
Delen op andere sites

Gast
Dit topic is nu gesloten voor nieuwe reacties.
×
×
  • Nieuwe aanmaken...

Belangrijke informatie

We hebben cookies geplaatst op je toestel om deze website voor jou beter te kunnen maken. Je kunt de cookie instellingen aanpassen, anders gaan we er van uit dat het goed is om verder te gaan.