Avatar billede visto Professor
07. februar 2023 - 13:06 Der er 29 kommentarer og
1 løsning

VBA auto-sortering af tabel, hvor data er cellereferencer

Først: Jeg har ingen forstand på VBA. Min brug af VBA begrænser sig til kode, jeg har fået eller kopieret.

Jeg har en tabel Lager, hvor jeg bruger nedenstående kode til automatisk at sortere efter kolonnen 2023:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim SalesTable As ListObject
Dim SortCol As Range

Set SalesTable = ActiveSheet.ListObjects("Lager")
Set SortCol = Range("Lager[2023]")

If Not Intersect(Target, SortCol) Is Nothing Then
    With SalesTable.Sort
        .SortFields.Clear
        .SortFields.Add Key:=SortCol, Order:=xlDescending
        .Header = xlYes
        .Apply
    End With
End If
   
End Sub

Data i 2023-kolonnen leveres fra andre af projektmappens ark via cellereferencer. Når et lagertal ændres via indtastning i et af disse ark, sker der imidlertid ingen sortering i Lager-arket på baggrund af den nye værdi, som cellereferencen har leveret til dette. Hvis jeg derimod forsøgsvis indtaster et tal i tabellen, udføres sorteringen.

Kan det lade sig gøre at få tabellen til at auto-sortere på baggrund af 2023-kolonnens cellereference-leverede tal?

Jeg bruger Excel 2013.
Avatar billede Jan Hansen Ekspert
07. februar 2023 - 18:00 #1
Hej

hvis du ligger følgende i et modul

Sub Sorter

Dim SalesTable As ListObject
Dim SortCol As Range

Set SalesTable = ActiveSheet.ListObjects("Lager")
Set SortCol = Range("Lager[2023]")


    With SalesTable.Sort
        .SortFields.Clear
        .SortFields.Add Key:=SortCol, Order:=xlDescending
        .Header = xlYes
        .Apply
    End With

 
End Sub

Og i arket
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, SortCol) Is Nothing Then
    Sorter
End If
 
End Sub
Private Sub Worksheet_Activate()
    Sorter
End Sub

så burde den sortere når arket bliver aktiv
Avatar billede visto Professor
07. februar 2023 - 18:02 #2
Jeg har uploadet et simplificeret eksempelark. Link til test-arket (uden makroer, da det ser ud til at vanskeliggøre brugbar download, så tilføj VBA-koden fra det oprindelige spørgsmål for at teste):
https://www.dropbox.com/scl/fi/odlyyvh80si7oqj7sxcga/Lager-test.xlsx?dl=0&rlkey=kuvf8d19c0niwdkaz2brwncnh

Hvis man ændrer indholdet (til fx 75) i Data1-fanens celle A1, ændres værdien i arket Lageroversigt via cellereference. Men der sker ingen sortering.

Hvis jeg derimod ved indtastning af tal ændrer værdien i Lageroversigtfanens celle L2 (som oprindeligt indeholder cellereferencen til førnævnte Data-1 celle A1, sorteres der.
Avatar billede visto Professor
07. februar 2023 - 18:17 #3
#1 Dit indlæg kom uden at jeg var opmærksom på det - var ved at skrive #2. Jeg kigger på det senere.
Avatar billede Jan Hansen Ekspert
07. februar 2023 - 19:13 #4
Det jeg gør er at lave en makro (Sorter)

derefter køres den når arket aktiveres og / eller kolonne L ændres

Mvh Jan
Avatar billede visto Professor
07. februar 2023 - 20:41 #5
Jeg fik det faktisk til at virke, men da jeg ikke rigtig ved, hvad jeg gør, er jeg nu der, hvor jeg ikke kan reproducere. Så det jeg sætter ind under Modul, bliver det samme under arket og omvendt.

Hvordan kan jeg sætte det ene ind det ene sted og det andet det andet sted?

Jeg har højreklikket på arket > Vis programkode.
Der har jeg så valgt Insert > Module

I det Module1, der derved skabes, indsætter jeg den kode du skriver skal ligge i et modul.

Dernæst vælger jeg i Project Explorer mit ark med tabellen. Når jeg herefter indsætter det andet sæt koder, som du beskriver det, står denne kode både under arket og i modulet.

Hvad gør jeg forkert?
Avatar billede Jan Hansen Ekspert
07. februar 2023 - 22:10 #7
Kode man bruger i flere situationer er fornuftig at have i et modul så det kun skal vedligeholdes  et sted
Avatar billede Jan Hansen Ekspert
07. februar 2023 - 22:15 #8
Du har to hændelser der starter makroen Sorter
Avatar billede visto Professor
07. februar 2023 - 22:51 #9
Dér var den.
Det jeg ikke havde fundet ud af, var at jeg skulle i kodeeditoren skulle højreklikke på arket og derefter vælge VBAPoject Properties for at kunne få det i to forskellige vinduer for ark og modul.

Jeg er langt fra at forstå, hvad der egentlig foregår. Men nu virker det!

Mange tak for hjælpen, som jeg virkelig værdsætter!
Avatar billede visto Professor
07. februar 2023 - 23:41 #10
Det er, efter at jeg har prøvet mig frem igen, nok mere præcist at sige, at det der drillede var, at de to vinduer for henh. ark og modul har ligget oveni hinanden, så jeg kun kunne se det ene, hvorfor jeg kun kunne indtaste det ene sted, og derfor fejlagtigt troede, at tingene blev blandet sammen. De to vinduer fremgår tydeligt at dit ark i #6 - hvis andre skulle have brug for tilsvarende hjælp.
Avatar billede Jan Hansen Ekspert
07. februar 2023 - 23:50 #11
Velbekomme
du har i arket 2 event handler, de aktiverer makroen der indeholder sorteringskoden, dette er en god måde at bygge det op på da du kun skal rette et sted hvis du vil ændre sorteringen. Kan også gøres mere dynamisk ved at oveføre variabel-værdier til makroen, men det ser ikke ud til du har brug for det.
Avatar billede visto Professor
08. februar 2023 - 10:01 #12
Du skriver i #7 "Kode man bruger i flere situationer er fornuftig at have i et modul så det kun skal vedligeholdes  et sted."
Men er der så ikke i den fil, du uploadede, byttet om på koderne til modul og ark?
Det med "Lager[2023]", som nu står i modul-koden, er jo specifikt knyttet til mit Lager-ark, mens jeg ikke kan finde noget tabelspecifikt i koden, der står til arket.

Jeg ville prøve at bruge metoden til sortering i et andet ark i projektmappen, hvor tabellen hedder "Forhandler", og kolonnen hedder "Antal". Men det gik ikke. Men før jeg går videre med det, vil jeg lige høre, om jeg tager fejl mht. ovenstående.
Avatar billede visto Professor
08. februar 2023 - 13:28 #13
Jeg prøvede lige at bytte om på koderne, men så virker det slet ikke.
Jeg har så prøvet hvad jeg ellers kunne finde på, men intet virker.

Kan jeg få dig til at hjælpe mig med, hvad jeg skal gøre, når jeg i projektmappen har et andet ark, hvor den tabel, jeg skal have sorteret hedder Forhandler (i arket Forhandleroversigt), og den kolonne i tabellen, der skal sorteres efter hedder Antal.

Hvis du vil hjælpe, er det måske lettest at lave tilføjelser til den opdaterede fil, jeg har uploadet:
https://www.dropbox.com/scl/fi/utr09qzgswketrxgo5pu6/Lager-test-3.xlsm?dl=0&rlkey=kesu28k8627y62uflbjgf2wm8
Avatar billede visto Professor
08. februar 2023 - 17:43 #15
Tak igen!

Jo, det virker.
En ting, jeg kunne ønske yderligere, er at placeringerne i Forhandler-tabellen opdateres, når en ny indtastning gør det relevant; det sker først, når jeg har skiftet til et andet ark og så derefter klikker mig tilbage på forhandler-arket.
Er det muligt?
Avatar billede Jan Hansen Ekspert
08. februar 2023 - 17:44 #16
prøver lige
Avatar billede visto Professor
08. februar 2023 - 17:52 #17
Tak :-)
Avatar billede visto Professor
08. februar 2023 - 21:34 #19
Tak. Jeg kigger på det i morgen.
Avatar billede visto Professor
09. februar 2023 - 11:11 #20
Bingo! Også det virker.

Jeg har andre tabeller i projektmappen, hvortil jeg vil tilføje denne autosortering, men jeg tror, at de teknikker, jeg nu er i besiddelse af, vil række til dette.

Mange tak igen!
Avatar billede visto Professor
09. februar 2023 - 14:05 #21
Jeg har lige opdaget en forskel mellem dine test-ark og så mit "virkelige" ark, som jeg overfører koderne til:
Jeg har til de forskellige tabeller tilhørende diagrammer på selvstændige faner, diagrammer som egentlig er dem, jeg kigger på og ikke tabellerne, som leverer data til diagrammerne. I vores test-ark, har jeg tilføjet et diagram af data fra fanen Lageroversigt. Når jeg ændrer et tal i en af Data-fanerne og derefter klikker på diagrammet over Lageroversigten, opdaterer diagrammet sorteret i forhold til de nye værdier. Det gør diagrammerne i mit "virkelige" ark ikke; værdierne opdateres selvfølgelig, men den gamle sortering bibeholdes. Her skal jeg først klikke på fanen med den samlede lageroversigt, som så opdaterer sorteringen, hvorefter jeg kan klikke på diagrammet, som nu er opdateret i forhold til den nye sortering.
Jeg vil selvfølgelig gerne have diagrammerne i mit ark til også at opdatere nysorteret, uden at jeg skal forbi et klik på det dataarket for at få dette opdateret først.

Har du nogen ide om, hvad det kan skyldes, at mine diagrammer ikke opdaterer med ny sortering? Kan jeg evt. indsætte noget kode, der sikrer at dataarkene opdaterer i baggrunden, uden at jeg behøver klikke på dem?

Jeg har uploadet vores test-ark med tilføjelse af diagram: https://www.dropbox.com/scl/fi/dzmf3t9dgxz6mydzlauk2/Lager-test-4.xlsm?dl=0&rlkey=0fg3z2xjxhi1vnitapducxrcf
Avatar billede visto Professor
09. februar 2023 - 17:06 #23
Når jeg efter at have indtastet et nyt tal i en af datafanerne klikker på diagramfanen, får jeg fejlmeddelelsen:
Run-time error '-2147417848 (80010108)':
Method 'Clear' of object 'SortFields' failed
Når jeg derefter trykker på Debug-knappen, er
.SortFields.Clear
gulmarkeret i modulvinduet.
Hvis jeg i stedet for at trykke på Debug, trykker på End-knappen, opdaterer diagrammet.
Avatar billede Jan Hansen Ekspert
09. februar 2023 - 18:52 #24
Jeg kan ikke genskabe fejlen her
Avatar billede Jan Hansen Ekspert
09. februar 2023 - 19:00 #25
Private Sub Chart_Activate()
    SetUp Sheets("Lageroversigt"), "Lager", "Lager[2023]"
End Sub


Vigtigt at Arknavn, Tabelnavn og tabelnavn[kolonnenavn] er rigtig.
Avatar billede visto Professor
09. februar 2023 - 19:39 #26
Jeg prøvede lige på min anden computer. Samme resultat. Er du sikker på, at den fil, som du ikke kan genskabe fejlen på, er den samme, som den du har uploadet?

Alternativt: Kan en forskel i Excel-version gøre en forskel? Min er 2013.
Avatar billede Jan Hansen Ekspert
09. februar 2023 - 20:32 #27
Da jeg ikke kan genskabe fejlen på min 365 excel kan jeg ikke hjælpe mere:
Måske en af de andre herinde med en 2013 kan!!
Avatar billede visto Professor
09. februar 2023 - 21:22 #28
Tak for alt det du har gjort!

Er der nogen med en Excel 2013, der kan hjælpe videre?
Avatar billede Jan Hansen Ekspert
09. februar 2023 - 21:38 #29
Tror du skal starte en ny tråd da en løst tråd ikke bliver set
Avatar billede visto Professor
09. februar 2023 - 21:49 #30
Ja, tænkte selv lige det samme. Tak for rådet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester