A mai posztban egy vágólapot feszegető kérdést fogunk körbejárni, amelyben a kedves Olvasó arra keresi a választ, hogy hogyan lehetne elérni, hogy egyetlen beillesztés után Excel vágólapunk üres legyen ismét és a vágólap tartalma ne őrződjön meg tovább.
Alapesetben az Excel Clipboard funkciót nem lehet teljesen eliminálni egy egyszerű checkbox ki-be pipálgatásával, így a következőkben néhány lehetséges áthidaló megoldást fogok bemutatni. Azért itt tegyük tisztába, hogy van egy Office-vágólap (24 elemre) és egy Windows-vágólap is (egyetlen elemre) és érdekes, de CTRL+C lenyomásával az Office-vágólapra pakolunk, CTRL+V lenyomásával pedig a Windows-vágólapról illesztünk be - hacsak manuálisan nem lépünk közbe a Clipboard varázslónk segítségével.
1. Szóval első opcióként a Home ribbonfül Clipboard szekciójában válasszuk az apró kis nyilacskát a jobb sarokban, hogy az egyéb lehetőségeket is láthassuk:
Ezzel meg fog jelenni bal oldalt a Clipboard menüsáv, benne listázva az éppen a vágólapon lévő elemeink:
Értelemszerűen tehát ha valamit vágólapra helyezünk, majd beillesztünk, utána a Clear All gomb használatával törölni tudjuk a régi elemeket. Nem egy hatékony megoldás, de megoldás, ha a sima Escape billentyűs menekülés már nem segít.
2. Használjunk egy roppant egyszerű VBA-s megoldást, amelynek első lépéseként mondjuk hozzunk létre egy gombot a munkalapunkon (vagy akár a Ribbonhoz is adhatunk ilyen gombot), amelyhez rendeljünk hozzá egy makrót.
Ez a makró nagyjából egy egyetlen soros kis kód lesz, egy Application.CutCopyMode = False tulajdonságállítással.
A gomb nem igazán életszerű megoldás, hiszen valószínűleg ezt a Clipboard kiürítéses megoldást állandóan használni szeretnénk, de ennek érdekében bármilyen más VBA-kód végére odaszúrhatjuk ezt az egyetlen sort. Ezt egyébként főleg rögzített makrókban találhatjuk.
3. A harmadik megoldás is VBA, ráadásul elegánsabb, amelyet meghatározott időközönként, gombhoz hozzárendelve, Ribbonra helyezve is tudunk használni.
VBA-editorban először is deklaráljunk három funkciót a következőképp:
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
A Private azt fogja elmondani a compilernek, hogy ez a funkció a jelenlegi osztályban vagy modulban lesz csak definiálva, más osztályokból nem érhető majd el. A Declare értelemszerűen azt mondja meg a compilernek, hogy a funkció később (mondjuk egy külső osztályban) kerül majd definiálásra, míg a Function maga a funkció, ami visszaad egy értéket. Ezután jön a funkció neve, majd a Lib, ami megmondja, hogy az adott funkció hol van definiálva - a mi esetünkben ez a user32.dll. A többi rész pedig magáért beszél.
A funkcióban a (ByVal hwnd As Long) azt a célt segít elérni, hogy olyan funkciót használhassunk, ami közvetlenül nem támogatott a VBA-ban, "hwnd" a "handle of the window" nem egy pontos cím, de a Windowst fogja útbaigazítani, mert a hwnd Windows API funkciók meghívásánál megadandó argumentum. Például hwnd kell akkor is, ha azt akarjuk megnézni, hogy az aktuális ablakunk mérete milyen.
Innentől kezdve már csak futtatnunk kell a három funkciót, amikor csak akarjuk - automatikusan bizonyos lépések után, gombnyomásra stb.
Sub ClearClipboard()
OpenClipboard (0&)
EmptyClipboard
CloseClipboard
End Sub
Fontos tudni, hogy a hármas pontban taglalt megoldás semmilyen formában nem saját, rengetegen használják úton-útfélen évek óta és én is csak javasolni tudom a bevetését szükség esetén.