2.2k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen !

Häufig möchte ich, dass nach Ablauf eines Makros die gleiche Zelle aktiv ist, die zu Beginn des Makros die aktive war. Ich beherrsche aber außer dem Makro-Aufzeichnungsrecorder vor allem nicht das Programmieren von Objekten. Vielleicht kann mir jemand bitte helfen?

Ich stelle mir folgenden Ablauf vor:
- das Makro merkt sich die aktive Zelle,
- erledigt den beabsichtigten Job (z.B. eine Sortierung),
- kehrt zu der ehemals aktiven Zelle zurück und
- gibt den evtl. Speicher-/Variablennamen zu einer erneuten Verwendung wieder frei.

Mit besten Grüßen

5 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Nick,
das geht viel einfacher. Benutze im Code nicht select und Activate. Das ist zu 99,9% nicht notwendig.

Gruß hajo
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Sub PositionMerken()
Dim pos
pos = ActiveCell.Address
' tue was anderes
Range(pos).Select
End Sub


Gruß marie
0 Punkte
Beantwortet von
Hallo

Bitte nicht Obige unzulänglichkeit annehmen

'Anhand dieser Beispiele ist gut zu erkennen das das Select vom Makrorecorder oft genutzt wird
'Es wird aber nicht genutzt weil es Sinnvoll wäre,sondern um Fehlerfreiheit zu garantieren
'Es sollte also nach jeder Makroaufnahme das Makro Optimiert werden
'Dazu noch ergänzend das bei größeren Makros die Laufzeit nicht mehr befriedigend ist

Option Explicit
Sub Falsch()
'Curser steht auf C1 und hält nicht die Position
Range("A1").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("C1").Select
End Sub


Option Explicit
Sub Richtig()
'Curser steht auf C1 und hält die Position
Range("A1").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub
0 Punkte
Beantwortet von
Hallo

Ein weiteres Beispiel wie sich code verkürzen bzw. Optimieren ließe

Als Beispiel ein Kopie Vorgang ,von Tabelle1 nach Tabelle2

Sub MakroAufnahme()
Range("A2:A5").Select
Selection.Copy
Sheets("Tabelle2").Select
Range("A2").Select
ActiveSheet.Paste
Range("A2").Select
Sheets("Tabelle1").Select
Range("A2").Select
Application.CutCopyMode = False
End Sub

Sub KopieInhalt()
Worksheets(1).Range("A2:A5").Copy Worksheets(2).Range("A2")
Application.CutCopyMode = False
End Sub

Sub KopieWert()
Worksheets(1).Range("A2:A5").Copy
Worksheets(2).Range("A2").PasteSpecial Paste:=xlValues, Operation:=xlNone
Application.CutCopyMode = False
End Sub


Man ist nun erstaunt wie kurz bzw. schnell das Makro nun auf einmal ist
0 Punkte
Beantwortet von
Hallo marie,

Besten Dank für die kompakte und schnelle Lösung.

Viele Grüße
easydoor
...