Aktives Arbeitsblatt sortieren. Fehler im Code!

Hallo.

Kenne mich nicht so gut im VBA aus. Bei meinem Code möchte ich nicht nur die Tabelle1 bearbeiten/sortieren, sondern das aktive Arbeitsblatt wo ich mich befinde. Das ist der jetzige Code zum Alphabetischen sortieren in einer Tabelle:

Sub hoch() ' ' hoch Makro ' ' Tastenkombination: Strg+h ' ActiveSheet.Unprotect "qwertz" ActiveWorkbook.Worksheets("Tabelle1").ListObjects("Tabelle1").Sort. \_ SortFields.Clear ActiveWorkbook.Worksheets("Tabelle1").ListObjects("Tabelle1").Sort. \_ SortFields.Add Key:=ActiveCell, SortOn:=xlSortOnValues, Order:= \_ xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Tabelle1").ListObjects("Tabelle1").Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ActiveSheet.Protect "qwertz" End Sub

Vielen Dank im voraus.
Danny.

Grüezi Danny

Aha - mein Hinweis hier http://www.office-loesung.de/ftopic566802_0_0_asc.ph…
scheint also geholfen zu haben - schade, dass Du dich dort nicht zurückmeldest, das ist nicht nett :frowning:

Ich habe versucht deinen Code umzuschreiben und etwas schöner zu strukturieren. Teste mal ob das so passt und gib diesmal bitte Feedback.

Sub hoch()
'
' hoch Makro
'
' Tastenkombination: Strg+h
'
 With ActiveSheet
 .Unprotect "qwertz"
 .ListObjects("Tabelle1").Sort.SortFields.Clear
 .ListObjects("Tabelle1").Sort.SortFields.Add \_
 Key:=ActiveCell, \_
 SortOn:=xlSortOnValues, \_
 Order:=xlAscending, \_
 DataOption:=xlSortNormal

 With .ListObjects("Tabelle1").Sort
 .Header = xlYes
 .MatchCase = False
 .Orientation = xlTopToBottom
 .SortMethod = xlPinYin
 .Apply
 End With
 .Protect "qwertz"
 End With
End Sub

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo.

Ohh, das tut mir leid. Kommt nicht wieder vor. :smile: Also leider funktioniert dein Vorschlag nicht. Beim ersten Blatt alles Super, doch beim 2-5 Blatt bringt er beim raus sortieren den Laufzeitfehler 9 (Index außerhalb des gültigen Bereichs). Hast du noch Ideen?

Mit freundlichen Grüßen
Danny.

Grüezi Danny

Ohh, das tut mir leid. Kommt nicht wieder vor. :smile:

…Schaun wir mal…

Also leider
funktioniert dein Vorschlag nicht. Beim ersten Blatt alles
Super, doch beim 2-5 Blatt bringt er beim raus sortieren den
Laufzeitfehler 9 (Index außerhalb des gültigen Bereichs). Hast
du noch Ideen?

Passe deine anderen Tabellenblätter so an, dass sie dem ersten entsprechen.

Welche Zeile im VBA-Editor wird denn markiert, wenn Du auf [Debuggen] klickst?

Gibt es da jeweils eine Liste/Tabelle mit dem Namen ‚Tabelle1‘, oder heissen die dort anders?

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Also als Fehler wird markiert:

.ListObjects(„Tabelle1“).Sort.SortFields.Clear

Nein, die Blätter haben die Namen:

Massebereitung
Teigbereitung
Teigteiler und VGS
Langroller und HGS
Durchlaufofen
Abteilungsleiter

Bei Massebereitung funktioniert der Code, bei den anderen nicht.

ListObjects auflisten lassen

Also als Fehler wird markiert:
.ListObjects(„Tabelle1“).Sort.SortFields.Clear

Hallo Danny,

lass mal das nachfolgende Makro laufen, vllt. hilfts.
Es sollte dir alle ListObjects auf einem neuen Blatt auflisten.

Gruß
Reinhard

Option Explicit

Sub tt()
Dim Zei As Long, N As Integer, L As Integer, wksNeu As Worksheet
With ThisWorkbook
 .Worksheets.Add after:=.Worksheets(.Worksheets.Count)
 Set wksNeu = .Worksheets(.Worksheets.Count)
 wksNeu.Range("A1:C1") = Split("Blatt Tabelle Bereich")
 Zei = 1
 For N = 1 To Worksheets.Count - 1
 With .Worksheets(N)
 Zei = Zei + 1
 wksNeu.Cells(Zei, 1).Value = .Name
 If .ListObjects.Count \> 0 Then
 For L = 1 To .ListObjects.Count
 wksNeu.Cells(Zei, 2).Value = .ListObjects(L).Name
 wksNeu.Cells(Zei, 3).Value = .ListObjects(L).Range.Address(0, 0)
 Zei = Zei + 1
 Next L
 Zei = Zei - 1
 End If
 End With
 Next N
End With
End Sub

Aja okay. Das wären dann:

Massebereitung Tabelle1 B4:L10
Teigbereitung Tabelle13 B4:L10
Teigteiler und VGS Tabelle14 B4:L12
Langroller und HGS Tabelle15 B4:L16
Durchlaufofen Tabelle17 B4:L11
Abteilungsleiter Tabelle16 B4:L7
Schutztabelle

Wahrscheinlich steh ich auf dem Schlauch, aber in wieweit bringt mir das dann was, oder kannst du mit den Daten was anfangen?

Grüße aus Brotterode.

Massebereitung Tabelle1 B4:L10
Teigbereitung Tabelle13 B4:L10
Teigteiler und VGS Tabelle14 B4:L12
Langroller und HGS Tabelle15 B4:L16
Durchlaufofen Tabelle17 B4:L11
Abteilungsleiter Tabelle16 B4:L7
Schutztabelle

Wahrscheinlich steh ich auf dem Schlauch, aber in wieweit
bringt mir das dann was, oder kannst du mit den Daten was
anfangen?

Hallo Feets,

ja stehst drauf. Thomas hat ja zu Recht gefragt:
„Gibt es da jeweils eine Liste/Tabelle mit dem Namen ‚Tabelle1‘, oder heissen die dort anders?“

In deinem/Thomas Code wird ja ja nach der Tabelle mit dem Namen
„Tabelle1“ gesucht. Da dieser Tabellenanme nur im ersten Blatt
existiert kommt bei den anderen Blätter natürlich Fehler 9.

Bin grad unterwegs, schnelle Nothilfe, tausche mal
.ListObjects(„Tabelle1“)
gegen
.ListObjects(1)

Dann kommt Fehler 9 nur noch bei Blatt Schutztabelle.

Gruß
Reinhard

Jaaa…es geht!!!

Vielen Dank dafür.
(ihr werdet leider häufiger noch von mir hören)

Grüße und einen angenehmen Sonntag!