John hat ein Makro, das verschiedene Arbeitsblätter in einer Arbeitsmappe verarbeitet. Er möchte zu Beginn des Makros den vom Benutzer ausgewählten Zellenbereich (oder die einzelne Zelle) speichern. Er verwendet ActiveCell.Address, um dies festzustellen. Am Ende des Makros möchte er dann mit demselben ausgewählten Bereich zum Benutzer zurückkehren, den er ursprünglich ausgewählt hat.

Das Problem ist, dass das Makro in einem völlig anderen Arbeitsblatt als dem vom Benutzer gestarteten beendet werden kann und ActiveCell.Address nur eine Zellenadresse, keinen Arbeitsblattnamen und definitiv keinen Bereich angibt. John fragt sich, wie er am besten speichern kann, was er benötigt, damit er am Ende des Makros zum ursprünglichen Speicherort des Benutzers zurückkehren kann.

Für die beste Chance, jemanden wieder dorthin zu bringen, wo er begonnen hat, gibt es drei Elemente: Arbeitsmappe, Arbeitsblatt und Zelle. Tatsächlich kann dieses letzte Element (Zelle) etwas vereinfacht sein, da der Benutzer immer eine Zelle ausgewählt hat (dies wird von ActiveCell.Address zurückgegeben), aber möglicherweise zusätzlich einen Bereich ausgewählt hat.

So erhalten Sie alle vier Elemente:

Dim rngOrigSelection As Range Dim rngOrigCell As Range Dim sOrigWS As String Dim sOrigWB As String

Set rngOrigSelection = Selection Set rngOrigCell = ActiveCell sOrigWS = ActiveSheet.Name sOrigWB = ActiveWorkbook.Name

Wenn Sie den Benutzer später an seinen Standort zurückbringen möchten, können Sie diesen Codetyp verwenden:

Workbooks(sOrigWB).Activate Sheets(sOrigWS).Select rngOrigSelection.Select rngOrigCell.Activate

Natürlich hat Excel immer mehrere Möglichkeiten, wie Sie eine bestimmte Aufgabe ausführen können. In diesem Fall können Sie Ihren Code verkürzen, indem Sie sich nur an die aktive Zelle und den ausgewählten Bereich erinnern:

Dim rngOrigSelection As Range Dim rngOrigCell As Range

Set rngOrigSelection = Selection Set rngOrigCell = ActiveCell

Wenn Sie den Benutzer am Speicherort wiederherstellen möchten, verlassen Sie sich auf das in VBA verfügbare übergeordnete Objekt:

rngOrigSelection.Parent.Parent.Activate rngOrigSelection.Parent.Select rngOrigSelection.Select rngOrigCell.Activate

Das übergeordnete Objekt des von Ihnen gespeicherten Auswahlbereichs ist das Arbeitsblatt, in dem sich dieser Bereich befindet, und das übergeordnete Objekt dieses übergeordneten Objekts ist die Arbeitsmappe, in der sich das Arbeitsblatt befindet.

Ein anderer Ansatz besteht darin, in Ihrem Makro einfach einen benannten Bereich zu erstellen, der sich auf das bezieht, was der Benutzer ausgewählt hat:

ActiveWorkbook.Names.Add Name:="MyOrigPlace", RefersTo:=Selection

Wenn Sie nach der Verarbeitung bereit sind, zu dem zurückzukehren, was der Benutzer ausgewählt hat, verwenden Sie den folgenden Code:

Application.Goto Reference:="MyOrigPlace"

ActiveWorkbook.Names("MyOrigPlace").Delete

Die erste Zeile kehrt zur Auswahl zurück und die zweite Zeile löscht dann den benannten Bereich. Der einzige Nachteil dieses Ansatzes besteht darin, dass die aktive Zelle nicht erhalten bleibt. Der Code geht davon aus, dass die obere linke Zelle im Bereich die aktive Zelle sein soll, wenn dies erledigt ist. Sie sollten sich auch darüber im Klaren sein, dass der Code möglicherweise nicht ordnungsgemäß funktioniert, wenn Ihre Verarbeitung die Zellen löscht, aus denen der benannte Bereich besteht. Excel kann nicht an einen Ort verschoben werden, der nicht mehr vorhanden ist.

Natürlich müssen Sie sich möglicherweise überhaupt keinen Ort merken, wenn Sie Ihr Makro richtig codieren. Während Sie sich mit VBA „bewegen“ und verschiedene Bereiche Ihrer Arbeitsblätter und Arbeitsmappen auswählen können, ist dies in den meisten Fällen nicht erforderlich. Sie können beispielsweise einfach mit verschiedenen Bereichen arbeiten und dann an diesen Bereichen arbeiten, ohne jemals die aktuelle Auswahl oder aktive Zelle zu ändern. In der Tat können Sie mit VBA fast alles ändern, neu formatieren, sortieren, löschen und tun, was Sie sich für Zellen vorstellen können, ohne sie tatsächlich auswählen zu müssen.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (3285) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: