Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Kleinen Code vereinfachen

Forumthread: Kleinen Code vereinfachen

Kleinen Code vereinfachen
Jenny
Hi Ihr,
ich habe heute folgenden Code erstellt und - da ich mit VBA noch sehr am Anfang bin - wollte Euch fragen, ob Ihr mir zeigen könnt, wie man den noch ein bisschen vereinfachen bzw. professioneller schreiben kann: :-)
Zusätzlich würde ich gerne in allen meinen Makros die Blattbezeichnungen neutral halten, so dass der Code auch beim Umbenennen funktioniert. Kann ich dazu in VBA einfach 1, 2, 3 usw. anstelle der Blattnamen und Anführungszeichen schreiben, also z.B. (3).Select statt ("Statistics").Select ?
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' Sorts Statistics data by number of searches for same keyword before closing sheet
Sheets("Statistics").Visible = True
Sheets("Statistics").Select
Columns("A:B").Select
ActiveWorkbook.Worksheets("Statistics").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Statistics").Sort.SortFields.Add Key:=Range( _
"B2:B12"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Statistics").Sort.SortFields.Add Key:=Range( _
"A2:A12"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Statistics").Sort
.SetRange Range("A:B")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
Sheets("Statistics").Visible = False
Sheets("Policy Search").Select
Range("D2").Select
ActiveWorkbook.Save
End Sub
Freue mich über jede Hilfe ! :-)
LG,
Jenny
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Kleinen Code vereinfachen
20.03.2012 00:03:41
Heiko
hi, Jenny,
alles hinter ActiveWorkbook.Worksheets("Statistics").Sort aus dem oberen Teil innerhalb der With Anweisung vor .SetRange einfuegen.
Eventuell noch aus Sheets("Statistics").Select und Columns("A:B").Select einfach Sheets("Statistics").Columns("A:B").Select machen. Brauchst Du die Selektion wirklich? Geht der Rest danach nicht auch ohne?
Prinzipiell kannst Du alles, was vorne gleich anfaengt in einer With-Anweisung zusammenfassen. Ist das Gleiche, nur kuerzer und etwas uebersichtlicher.
Gruesse, Heiko
Anzeige
AW: Kleinen Code vereinfachen
20.03.2012 00:41:33
fcs
Hallo Jenny,
den Code kannst du wie folgt etwas einfacher gestalten. Dabei habe ich zur Vereinfachung das Tabellenblatt einer Objektvariablen zugewiesen, dafür hab ich mal alle 3 Möglichkeiten eingebaut. Da muss du die für dich am besten geeignete aussuchen.
Wenn du mit der Index-Nummer statt mit dem Tabellennamen arbeiten willst, dann muss sichergestellt sein, dass keine Blätter eingefügt oder gelöscht werden oder dass Register verschoben werden, da sich die Indexnummern rechts vom eingefügten/gelöschten Blatt dann ändern.
Wenn innerhalb einer Datei ein bestimmtes Tabellenblatt unabhängig von Name oder Index-Nr. per VBA bearbeitet werden soll, dann verwendet man am besten den Code-Namen der im Projekt-Explorer des VBA-Editors angezeigt wird.
Die Verwendung der Indexnummer ist dann sinnvoll, wenn man unabhängig vom Blatt-Namen die gleichen Makros auf alle Blätter anwenden kann oder wenn eine Mappe nur 1 Tabellenblatt hat oder wenn man sicher ist, dass die Reihenfolge der Register-Blätter immer gleich ist.
Gruß
Franz
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' Sorts Statistics data by number of searches for same keyword before closing sheet
Dim wks As Worksheet
Set wks = Me.Worksheets("Statistics")
'oder
Set wks = Me.Worksheets(2) '2 = Index-Nr des Registers der Tabelle "Statistics"
'oder
Set wks = Tabelle4   'Tabelle4 = Codename der Tabelle "Statistics"
With wks
.Visible = True
.Activate
With .Sort
With .SortFields
.Clear
.Add Key:=wks.Range("B2:B2"), SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortNormal
.Add Key:=wks.Range("A2:A2"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
End With
.SetRange wks.Range("A:B")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
.Range("A1").Select
.Visible = False
End With
Sheets("Policy Search").Select
Range("D2").Select
Me.Save
End Sub

Anzeige
AW: Kleinen Code vereinfachen
20.03.2012 00:51:16
Jenny
Hallo Franz,
das ist ja super und klasse erklärt - vielen Dank dafür ! :-)
Ist echt eine riesen Hilfe so !
LG und einen schönen Abend Dir,
Jenny
AW: Kleinen Code vereinfachen
20.03.2012 11:06:10
Jenny
Hallo Heiko,
vielen Dank für Deine Antwort ! :-)
Kannst Du mir sagen, wie genau es hier aussehen würde, wenn man alles unter With zusammenfasst ?
Das habe ich bislang noch nicht gemacht aber wenn es einmal im Vergleich sehe, kann ich es bestimmt beim nächsten Mal. ;-)
LG und nochmals vielen Dank im Voraus,
Jenny
Anzeige
da gibts doch Beispiele im Forum-suchen hilft-owT
20.03.2012 11:34:44
robert
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige