VBA project - kolumbreedte past enkel aan (autofit) op eerste tabblad

Status
Niet open voor verdere reacties.

oederdekoe

Gebruiker
Lid geworden
2 mei 2013
Berichten
17
Hoi allen

Ik heb wat code geschreven om een aantal processen te automatiseren, wat mij in de toekomst uren werk kan besparen.
Wat je wel moet weten is dat ik een absolute beginner ben op het gebied van VBA. :shocked:

Begin situatie : De tabbladen <<Personen, ENEJOJ, NIET, WEL tot nu, WEL totaal>> bevatten elks data die geimporteerd wordt vanuit cvs files.

Doel :
- de data op ieder tabblad converteren naar een table (check)
- de breedte van de kolommen aanpassen aan de inhoud (dit is waar ik vastloop)
- de data alfabetisch sorteren op kolom "Persoon" (check)
- het importeren van de content van de tabbladen moet nadien ook nog geautomatiseerd worden, but first things first (to do)

Enkel de kolombreedte van het eerste tabblad "Personen" wordt aangepast. Bij de anderen tabbladen gebeurt er niks. De code geeft thans geen error ofzo. En de rest van de code (sorteren op kolom Persoon) doet ie wel gewoon prima.
Ik ben ook begonnen met het opnemen van een macro, dus excel heeft die code quasi volledig zelf gecreëerd.
Ik begrijp dus niet wat het probleem is.

Code:
    Sheets("Personen").Select
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("A1").CurrentRegion, , xlYes).Name = "Personen"
    ActiveCell.Cells.Select
    ActiveCell.Cells.EntireColumn.AutoFit
    ActiveWorkbook.Worksheets("Personen").ListObjects("Personen").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Personen").ListObjects("Personen").Sort.SortFields. _
        Add Key:=Range("Personen[[#All],[Persoon]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Personen").ListObjects("Personen").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    
    
    Sheets("EN EJ OJ").Select
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("A1").CurrentRegion, , xlYes).Name = "ENEJOJ"
    ActiveCell.Cells.Select
    ActiveCell.Cells.EntireColumn.AutoFit
    ActiveWorkbook.Worksheets("EN EJ OJ").ListObjects("ENEJOJ").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("EN EJ OJ").ListObjects("ENEJOJ").Sort.SortFields. _
        Add Key:=Range("ENEJOJ[[#All],[Persoon]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("EN EJ OJ").ListObjects("ENEJOJ").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Iemand advies? Zie bestand in bijlage (heb data beetje aangepast ivm gevoelige info).
Hopelijk is mijn uiteenzetting voldoende duidelijk.

Bekijk bijlage BEV FORUM.xlsm
 
Laatst bewerkt:
Het eerste advies is die code in codetags te zetten in plaats van als quote.
 
Laatst bewerkt:
Begin bij het begin

Code:
Sub VenA()
Dim sh
For Each sh In Sheets
  If sh.Name <> "INFO" Then
    With sh
      .Rows(2).Delete
      .ListObjects.Add(xlSrcRange, .Range("A1").CurrentRegion, , xlYes).Name = .Name
      .Columns.AutoFit
      .ListObjects(1).DataBodyRange.Sort .Cells(1, 2), , , , , , , 1
    End With
  End If
Next sh
End Sub
 
Alvast bedankt voor jouw uiterst snel en doeltreffend antwoord, VenA ! :thumb:
Jouw code is wel héél wat korter dan de mijne... :eek:

Slechts 1 klein dingske :
De kolom "Persoon", waarop gesorteerd moet worden, bevindt zich niet in iedere tabel in de 2e kolom.
Op de sheet "Personen" is dit de 1e kolom.
 
Volgens mij moet het ook kunnen om direct op een kolomnaam te sorteren maar krijg ik even niet voor elkaar zonder een code te creëren als in #1:d

Zo werkt het ook
Code:
.ListObjects(1).Range.Sort .ListObjects(1).ListColumns(Application.Match("Persoon", .ListObjects(1).HeaderRowRange, 0)), , , , , , , 1
 
Code:
.ListObjects(1).DataBodyRange.Sort Range(.ListObjects(1) & "[Persoon]"), , , , , , , 1
 
Optie:
Code:
 .ListObjects(1).ListColumns("persoon").DataBodyRange.Sort "persoon", , , , , , , 0
 
Bedankt HSV.
Deze deed het prima :
Code:
.ListObjects(1).ListColumns("persoon").DataBodyRange.Sort "persoon", , , , , , , 0

Nu had ik ook nog graag een Total row bij iedere tabel.
Ik dacht eerst:
Code:
.ListObjects(1).ShowTotals = True
Lekker kort, en het werkt. Maar de total row is enkel nodig bij de kolom "Verloon duurtijd". Dus op de sheet "Personen" is dit niet nodig.
 
Code:
.ListObjects(1).ShowTotals = sh.Name <> "Personen"
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan