Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1252to1256
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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
da gibts doch Beispiele im Forum-suchen hilft-owT
20.03.2012 11:34:44
robert

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige