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

Opgelost VBA verbergen lege kolommen en kopiëren gegevens

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

serpent xx

Gebruiker
Lid geworden
2 mei 2008
Berichten
195
Hallo forumleden,

ik heb 2 vraagjes.

Vraag 1 (tabblad 1):
In bijgaand bestand is het de bedoeling dat met een wisselknop legen kolommen verborgen resp. weer zichtbaar worden.
Op het forum heb ik een vba gevonden die kolommen kan verbergen. Alleen weet ik niet hoe deze automatisch de lege kolommen 7 t/m 12 verbergt en weer zichtbaar maakt. Heeft iemand een tip?

Vraag 2 (tabblad 2):
Het is de bedoeling dat met een vba de data (dus niet incl. formule) uit kolom E naar rechts gekopieerd wordt naar de betreffende kolom met dezelfde naam als cel E1 (in dit voorbeeld dus I1). Daarna dient cel E1 en kolom C en D (beide vanaf C2 en D2) leeggemaakt te worden. De formule in kolom E moet blijven bestaan. De volgende keer uiteraard fase 2 en volgende naar resp. kolom J, K enz. Als dit op een andere gemakkelijkere manier automatisch kan, hoor ik dat natuurlijk ook graag.

Alvast bedankt.
 

Bijlagen

Vraag 1:
Het is een wisselknop, dus dat werkt al.
Druk er nog maar eens op.

De drie regels code kan je ook vervangen door deze ene regel:
Code:
Columns("G:L").Hidden = Not Columns("G:L").Hidden

Beide vragen, zie document:
 

Bijlagen

Laatst bewerkt:
Ik heb zo het vermoeden dat TS de macro wil laten bepalen welke kolommen leeg zijn om ze vervolgens te kunnen verbergen en tonen, klopt dat?
 
Zou je maar zo gelijk in kunnen hebben.
Ook geen probleem, maar we wachten de reactie van TS af.
 
Alvast dank voor jullie reactie.

Vraag 1:
Inderdaad, de macro dient te bepalen welke kolommen leeg zijn.

Vraag 2:
De macro werkt niet helemaal goed. Indien je in het gele vlak fase 2 invult, worden de gegevens toch rechts in de kolom van fase 1 ipv fase 2 gezet. Daarnaast zou die ook moeten kijken welke rijen gevuld zijn om t/m de onderste rij de gegevens naar rechts over te zetten. Nu wordt dit nog default bepaald in de vba. Dit had ik idd ook niet aangegeven.
 
Waarom heb je die lege kolommen nodig ?
Dat duidt op een onjuiste opzet van je gegevensstruktuur.
 
De lege kolommen worden in de tijd gevuld. Zolang ze niet gevuld zijn, bieden ze geen meerwaarde en wordt het niet overzichtelijker. Vandaar de keuze om ze voorlopige te verbergen totdat ze gevuld zijn.
 
Vraag 2:
De macro werkt niet helemaal goed. Indien je in het gele vlak fase 2 invult, worden de gegevens toch rechts in de kolom van fase 1 ipv fase 2 gezet. Daarnaast zou die ook moeten kijken welke rijen gevuld zijn om t/m de onderste rij de gegevens naar rechts over te zetten. Nu wordt dit nog default bepaald in de vba. Dit had ik idd ook niet aangegeven.
Dat is logisch.
Je voorbeeld document bevat alleen fase 1 en daar is de code op gebaseerd.
Bestudeer die code en maak de aanpassing voor de andere fasen.
 
Het voorbeeld bevat 4 fases (rechterkant). De code is een statische code die ervoor zorgt dat steeds dezelfde kolommen verborgen worden. In de loop van de tijd worden echter nieuwe kolommen (fases) gevuld. Het is de bedoeling dat die dan niet verborgen worden.
 
Vraag1:
Code:
Private Sub ToggleButton1_Click()
    For Each col In ActiveSheet.ListObjects("Tabel1").ListColumns
        If Columns(col.Range.Column).Hidden Then
            Cells.EntireColumn.Hidden = False
            Exit Sub
        End If
    Next
    For Each col In ActiveSheet.ListObjects("Tabel1").ListColumns
        Columns(col.Range.Column).Hidden = Application.WorksheetFunction.CountA(col.Range.Cells) = 1
    Next
End Sub
 
Vraag1:
Code:
Private Sub ToggleButton1_Click()
    For Each col In ActiveSheet.ListObjects("Tabel1").ListColumns
        If Columns(col.Range.Column).Hidden Then
            Cells.EntireColumn.Hidden = False
            Exit Sub
        End If
    Next
    For Each col In ActiveSheet.ListObjects("Tabel1").ListColumns
        Columns(col.Range.Column).Hidden = Application.WorksheetFunction.CountA(col.Range.Cells) = 1
    Next
End Sub
Top!
Alleen in mijn definitieve versie staan in de "lege" cellen nu formules waarbij het resultaat in de hele kolom voorlopig 0 is totdat deze (deels) gevuld worden met uitslagen. Deze zijn dus niet meer leeg.
Hoe kan ik deze kolommen waarbij de waarde in de HELE kolom 0 is op een soortgelijke manier verbergen?
 
Kleine wijziging:
Code:
        Columns(col.Range.Column).Hidden = Application.WorksheetFunction.Sum(col.Range.Cells) = 0
 
Een van beide:; 'Application' of 'WorksheetFunction' is overbodig.
 
Mijn vraagstelling was blijkbaar niet compleet; ik had beter het aangepaste bestand kunnen bijvoegen.
Kolom A is leeg en dient niet verborgen te worden; kolom B bevat enkel tekst en wordt nu ook verborgen.
Kun je dat ook vanaf een bepaalde kolom laten werken; bv vanaf kolom C?
 
Code:
If col.Index > 2 Then Columns(col.Range.Column).Hidden = WorksheetFunction.Sum(col.Range.Cells) = 0
 
Code:
Private Sub ToggleButton1_Click()
 With ListObjects(1)
   If ToggleButton1 Then
    .Range.Columns.Hidden = 0
    Exit Sub
   End If
    For j = 3 To .ListColumns.Count
        .Range.Columns(j).Hidden = Application.Sum(.Range.Columns(j)) = 0
    Next j
 End With
End Sub
 
Laatst bewerkt:
Mooi, vraag 2 ook opgelost?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan