VBA - Tabelle sortieren ohne erste / letzte Zeile

Moderator: ModerationP

VBA - Tabelle sortieren ohne erste / letzte Zeile

Beitragvon Proma » 02. Dez 2019, 09:08

Hallo liebe Experten,

derzeit stehe ich vor der Herausforderung, eine Tabelle per VBA zu sortieren, wobei die erste Zeile (Spaltenüberschriften) wie auch die letzte Zeile (Summen) von der Sortierung ausgenommen werden sollen. Die Sortierung einer Tabelle mit VBA - auch ohne Überschriftenzeile - ist im Web hinreichend beschrieben. Jedoch will es mir nicht gelingen, einen Weg zu finden, der es mir ermöglicht, auch die letzte Tabellenzeile von der Sortierung auszunehmen.
Eigentlich erscheint mir diese Notwendigkeit ganz alltäglich zu sein. Gibt es wirklich keine Lösung dafür (kann ich mir kaum vorstellen) oder stehe ich bloß mal wieder auf der Leitung (könnte ich mir durchaus vorstellen :P )?

Ich arbeite mit Win 10 / Office 2010
Vielen Dank vorab für Eure Unterstützung und liebe Grüße
vom Martin


So etwa sieht meine Tabelle aus (es soll nach Namen sortiert werden):
----------------------------------
NAME BETRAG
----------------------------------
Meier 100
Huber 400
Müller 300
Schulz 200
----------------------------------
SUMME 1000
----------------------------------
Proma
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 496
Registriert: 08. Sep 2015, 11:43

Re: VBA - Tabelle sortieren ohne erste / letzte Zeile

Beitragvon theoS » 02. Dez 2019, 13:34

Vielleicht so?
Code: Alles auswählen
Sub SortL()

'Sorter ohne Fuß
Dim dd1 As Document: Set dd1 = ActiveDocument
Dim rngT As Table: Set rngT = dd1.Tables(1)
Dim rngSor As Range, rB As Long, rC As Long
rB = rngT.Range.Start: rC = rngT.Range.End

rg = rngT.Rows.Count
If rg <= 2 Then Exit Sub

rr = rngT.Rows(rg - 1).Range.End
Set rngSor = dd1.Range(rB, rr)

  rngSor.Sort ExcludeHeader:=True, FieldNumber:="Spalte1", sortorder:=wdSortOrderDescending
End Sub
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4876
Registriert: 19. Apr 2008, 00:14

Re: VBA - Tabelle sortieren ohne erste / letzte Zeile

Beitragvon Proma » 02. Dez 2019, 17:48

Hallo theo s.,

vielen Dank für Deine Nachricht und den Code!
Ich hab' mich da mal ein bisschen hineingekniet, ein bisschen damit herum gespielt und versucht, das alles zu verstehen. Im wesentlichen - glaube ich - hab' ich's schon kapiert. Allerdings verstehe ich nicht ganz, warum bei meiner "Spiel"-Tabelle (als Anlage beigefügt) folgendes passiert:
1. Spalte (ID=Zahlen) sortieren klappt (ok, Zahlen werden als Text sortiert, muss ich bei SortFieldType einstellen, schon klar)
2. Spalte (Name=Text) sortieren klappt irgendwie nicht (immer), da muss ich der Sache noch auf den Grund gehen.
3. Spalte (Vorname=Text) sortieren klappt einwandfrei.

Ich werde mich noch weiter damit beschäftigen und melde mich noch einmal, sobald ich das Problem gefunden habe (wahrscheinlich sitzt es wieder mal 40 cm vor meinem Monitor :P ).

Bis dahin nochmal herzlichen Dank und liebe Grüße
vom Martin
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Proma
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 496
Registriert: 08. Sep 2015, 11:43

Re: VBA - Tabelle sortieren ohne erste / letzte Zeile

Beitragvon Proma » 02. Dez 2019, 20:37

Hallo theo s.,

es gibt bekanntlich Dinge zwischen Himmel und Erde, die man nicht unbedingt verstehen muss. Mit Deinem Code habe ich jetzt so lange herum gespielt (ohne dabei wirklich etwas verändert zu haben), bis er - getreu dem AEG-Prinzip (Auf Einmal Geht's) - plötzlich perfekt arbeitet!

Tausend Dank dafür, jetzt habe ich genau das, was ich brauche! Und dazugelernt habe ich auch wieder etwas :P

Den Code, den ich von Dir bekommen und (nur optisch) ein bisschen aufbereitet, von der Funktionalität her jedoch nahezu unverändert belassen habe, stelle ich hier nochmal rein, vielleicht kann's jemand brauchen.

Nochmals ganz herzlichen Dank für Deine Unterstützung und einen schönen Abend!
Liebe Grüße
vom Martin
Code: Alles auswählen
Option Explicit

Sub SortL()
'Sortiert die Datenzeilen einer Tabelle.
'Kopf- und Fußzeile (Überschriften- und
'Summenzeile) werden in die Sortierung
'nicht mit einbezogen.

'Autor:
'theoS, Mitglied des Experten-Teams Office Forum (provisorisch)

'Fundstelle:
'http://www.office-loesung.de/p/viewtopic.php?f=162&t=824147


'=====< Sortierkriterien hier einstellen >========================================================================
 
  Const intSrtFldNum As Integer = 3                             'Sortiere nach dieser Spalte
  Const lngSrtOrder  As Long = 1                                'Sortierfolge:  0=A..Z   1=Z..A
  Const lngSrtFldTyp As Long = 0                                'Sortiere als:  0=Text   1=Zahl   2=Datum
'=================================================================================================================


  Dim objDoc       As Word.Document                             'dd1    - Dokument mit der zu sortierenden Tabelle
  Dim rngTbl       As Word.Table                                'rngT   - Tabelle  mit den zu sortierenden Zeilen
  Dim rngSrt       As Word.Range                                'rngSor - der zu sortierende Bereich
 
' Dim lngRowAnz    As Long                                      'rg     - Anzahl der zu sortierenden Tabellenzeilen
  Dim lngSrtAnf    As Long                                      'rB     - Erstes  Zeichen des zu sortierenden Bereichs
  Dim lngSrtEnd    As Long                                      'rr     - Letztes Zeichen des zu sortierenden Bereichs
 

'Initialisieren
  Set objDoc = ActiveDocument                                   'Dokument mit der zu sortierenden Tabelle
  Set rngTbl = objDoc.Tables(1)                                 'Die zu sortierende Tabelle
  With rngTbl                                                   'Bezugsobjekt: Die zu sortierende Tabelle
    If .Rows.Count <= 2 Then Exit Sub                           'Wenn weniger als 2 Datenzeilen (+ Fußzeile) -> beenden
    lngSrtAnf = .Range.Start                                    'SortBereich Anfang = 1. Tabellenzeile, 1. Zeichen
    lngSrtEnd = rngTbl.Rows(.Rows.Count - 1).Range.End          'SortBereich Ende   = Vorletzte TabZeile, letzt.Zeichen
    Set rngSrt = objDoc.Range(lngSrtAnf, lngSrtEnd)             'Initialisiere die Variable für den Sortierbereich
  End With                                                      'Ende Bezugsobjekt (Die zu sortierende Tabelle)


'Sortieren
  rngSrt.Sort ExcludeHeader:=True, FieldNumber:=intSrtFldNum, SortFieldType:=lngSrtFldTyp, SortOrder:=lngSrtOrder
 
 
'Aufräumen
  Set rngTbl = Nothing
  Set rngSrt = Nothing
  Set objDoc = Nothing
End Sub

Proma
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 496
Registriert: 08. Sep 2015, 11:43

Re: VBA - Tabelle sortieren ohne erste / letzte Zeile

Beitragvon theoS » 03. Dez 2019, 16:57

Das sieht doch ganz gut aus. Allerdings läuft das nur mit der 1. Tabelle in jedem Dokument.
Wenn du mehr haben solltes und das mit der Markierung machen möchtest, dann kannst du die Tabelle auch so definieren dass du
Code: Alles auswählen
  Set rngTbl = selection.Tables(1)
nehmen kannst.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4876
Registriert: 19. Apr 2008, 00:14

Re: VBA - Tabelle sortieren ohne erste / letzte Zeile

Beitragvon Proma » 04. Dez 2019, 14:08

Hallo theo s.,

vielen Dank für Deinen Tipp!

Es ist tatsächlich so, dass sich mehrere Tabellen in dem Dokument befinden. Weil ich alle diese Tabellen über eine Userform bediene, habe ich jede der Tabellen mit einer Textmarke versehen und kann sie jetzt so ansprechen:
Code: Alles auswählen
'Ermittle die Anzahl der Tabellenzeilen und -spalten
  With ActiveDocument.Bookmarks(strTextMarke).Range.Tables(1)   'Bezugsobjekt: Tabelle Adressen
    r = .Rows.Count                                             '  Anzahl der Zeilen
    c = .Columns.Count                                          '  Anzahl der Spalten
  End With                                                      'Ende Bezugsobjekt: Tabelle Adressen

Tabellen per Markierung auswählen und dann z.B. über ActiveX-Steuerelemente zu bedienen, hat natürlich auch seinen Charme! :P
Ich finde dieses Forum und seine Experten einfach großartig! Für Jubiläums-Programmierer wie mich ein wahrer Segen.

Vielen Dank nochmal für die Unterstützung und liebe Grüße
vom Martin
Proma
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 496
Registriert: 08. Sep 2015, 11:43


Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast