Het opslaan van een gebruiker Locatie Voordat u een Macro

John heeft een macro dat sommige bewerking van verschillende werkbladen in een werkmap doet. Hij wil aan het begin van de macro, de reeks cellen (of de enkele cel) die de gebruiker heeft gekozen slaan. Hij gebruikt ActiveCell.Address om dit te bepalen. Vervolgens aan het einde van de macro wil hij terug naar de gebruiker hetzelfde bereik gekozen dat oorspronkelijk geselecteerd.

Het probleem is, kan de macro worden afgewerkt op een geheel ander werkblad dan waar de gebruiker gestart, en ActiveCell.Address geeft slechts een cel adres, niet een werkblad naam en zeker niet een bereik. John vraagt ​​zich af over de beste manier om op te slaan wat hij nodig heeft, zodat hij kan terugkeren naar de oorspronkelijke locatie van de gebruiker aan het einde van de macro.

Voor de beste kans op het krijgen van iemand terug naar waar ze begonnen, zijn er drie elementen: werkboek, werkblad, en de cel. Eigenlijk kan dit laatste element (cel) een beetje simplistisch, als de gebruiker altijd een cel geselecteerd (dit is wat wordt geretourneerd door ActiveCell.Address), maar kan bovendien hebben een bereik gekozen.

Hier is hoe je alle vier items:

Dim rngOrigSelection als Waaier
Dim rngOrigCell als Waaier
Dim sOrigWS As String
Dim sOrigWB als Koord

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

Wanneer u later wilt dat de gebruiker waar ze waren terug te keren, kunt u dit type code gebruiken:

Werkboeken (sOrigWB) .Activate
Sheets (sOrigWS) .Selecteer
rngOrigSelection.Select
rngOrigCell.Activate

Natuurlijk, Excel heeft altijd meerdere manieren waarop je een bepaalde taak kan volbrengen. In dit geval zou u uw code te verkorten door alleen het onthouden van de actieve cel en geselecteerde bereik:

Dim rngOrigSelection als Waaier
Dim rngOrigCell als Waaier

Stel rngOrigSelection = Selection
Stel rngOrigCell = ActiveCell

Wanneer u wilt dat de gebruiker in staat om de locatie te herstellen, u vertrouwt op het bovenliggende object beschikbaar in VBA:

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

Het bovenliggende object van de selectie bereik je gered is het werkblad waarin dat bereik ligt, en de moeder van die ouder object is de werkmap waarin het werkblad ligt.

Een andere benadering is om gewoon te creëren, binnen uw macro, een benoemd bereik die verwijst naar wat de gebruiker heeft geselecteerd:

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

Nadat u uw verwerking doen, als je klaar bent om terug te gaan naar wat de gebruiker had gekozen zijn, deze code gebruik je:

Application.Goto Referentie: = "MyOrigPlace"
ActiveWorkbook.Names ("MyOrigPlace"). Delete

De eerste regel keert terug naar de selectie en de tweede lijn verwijdert vervolgens de benoemde bereik. Het enige nadeel van deze aanpak is dat de actieve cel niet wordt gehandhaafd; de code gaat ervan uit dat u wilt dat de cel linksboven in het bereik van de actieve cel te zijn wanneer het wordt gedaan. U moet zich ook bewust dat als uw verwerking verwijdert de cellen die deel uitmaken van het benoemde bereik, dan kan de code niet goed werkt-Excel kan niet naar een plek die niet meer bestaat.

Natuurlijk kan je niet aan een locatie te onthouden helemaal niet, als je je macro correct te coderen. Terwijl VBA kunt u "bewegen" en selecteer de verschillende gebieden van uw werkbladen en werkboek, in de meeste gevallen is dit niet nodig. Je zou bijvoorbeeld gewoon werken met verschillende reeksen en dan doe je werk op deze bereiken, zonder ooit de huidige selectie of de actieve cel te veranderen. Inderdaad, VBA kunt u veranderen, formatteren, sorteren, verwijderen en doen bijna alles wat je maar kunt bedenken om cellen zonder daadwerkelijk nodig hebben om ze te selecteren.

ExcelTips is uw bron voor kosteneffectieve Microsoft Excel training. Deze tip (3285) is van toepassing op Microsoft Excel 97, 2000, 2002 en 2003. U kunt een versie van deze tip voor de ribbon-interface van Excel (Excel 2007 en later) vindt u hier: Het opslaan van een gebruikershandleiding Locatie Voordat u een Macro.