Veringerung der Codelänge
23.03.2020 16:27:39
Steve
Moin Leute,
ich habe da zwei Fälle mit derselben Fragestellung. Ich habe zwei Codeteile die mir etwas lang erscheinen. Ich frage mich nun, wie ich diesen Code verringern kann.
Es handelt sich hier um zwei unterschiedliche Makros, auch wenn es vielleicht wegen dem Range nicht so aussieht.
Makro 1.
Hier wird der Inhalt einer Zelle mit dem Namen Objekt an vier andere Zellen übergeben. Die Zielzellen sind die Spalte 2 von intelligenten Tabellen. Jeder der 4 Tabellen befinden sich in einem eigenen Sheet. Das Makro funktioniert einwandfrei, nur gefällt mir der aufbau nicht. Kann man das nicht was kompakter machen? Habe versucht alle Ranges in einer Klammer zu schreiben und mit Komma zu trennen, aber das ging nicht. Was habe ich da für Möglichkeiten?
Sub yfertigDATEN()
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFiltering:=True, AllowUsingPivotTables:=True
ActiveWindow.SelectedSheets.Visible = False
Range("N_Objekt").Copy
Range("N_Objekt1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("N_Objekt2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("N_Objekt3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("N_Objekt4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Startseite").Select
End Sub
Makro 2Beim Erstellen eines neuen Arbeitsblattes werden Einträge in verschiedene Tabellen gemacht. die Spalten 1 & 2 der Tabellen sind immer gleich, der Rest ist unterschiedlich. Es soll immer nach Spalte 2 sortiert werden. Auch hier funktioniert der Code. Kann ich das irgendwie entschlacken? Es soll übrigens lediglich nach Alphabet bzw. Größe sortiert werden. A bzw. 1 oben.
Die Überschrift der Spalte 2 KANN sich ändern (wenn dann aber für ALLE Tabellen) Das geschieht dann mit dem oben stehenden Makro 1.
ActiveWorkbook.Worksheets("Startseite").ListObjects("tabStart").Sort.SortFields _
.Clear
ActiveWorkbook.Worksheets("Startseite").ListObjects("tabStart").Sort.SortFields _
.Add2 Key:=Range("N_Objekt1"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Startseite").ListObjects("tabStart").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWorkbook.Worksheets("LISTE").ListObjects("Liste1").Sort.SortFields _
.Clear
ActiveWorkbook.Worksheets("LISTE").ListObjects("Liste1").Sort.SortFields _
.Add2 Key:=Range("N_Objekt2"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("LISTE").ListObjects("Liste1").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Ich frage mich, ob man das nicht was kompakter gestalten kann. Allerdings befinden sich diese Tabellen ja alle in einem eigenen Sheet. Ich frage mich allerdings ob das nicht egal ist, da intelligente Tabellen ja einen Namen haben und mein Laienverständnis mir sagt, das diese wie eine Zelle die einen Namen hat direkt angesprochen werden kann.
(Hoffe jemand kann verstehen was ich meine.)
Was allerdings anders ist, ist das die zu sortierende Spaltenüberschrift einen Namen hat mit einer Fortlaufenden Nummer. Vielleicht kann man statt den Namen irgendwie die zweite Spalte unabhängig vom Namen oder Inhalt ansprechen.
Liebe Grüße
Steve