poniedziałek, 3 lutego 2014

Przekazywanie danych do/ze schowka

W jaki sposób wykorzystać schowek (clipboard) w celu przekazania informacji pomiędzy różnymi aplikacjami, obszarami czy obiektami arkusza czy skoroszytu? W większości przypadków do dyspozycji mamy metody typu .Copy >> .Paste >> .PasteSpecial, które występują w modelu obiektowym całego pakietu Microsoft Office. Techniki te umożliwiają przekazywanie (kopiowanie) tabel, obiektów warstwy rysunkowej, tekstu, itp.

Istnieje jednak specjalna technika, która pozwala na zapełnienie schowka określonym tekstem, a także umożliwia pobranie aktualnych wartości ze schowka o ile dotyczą tekstu (lub wartości liczbowych). Prześledźmy to rozwiązanie w kolejnych krokach zaprezentowanych poniżej.

1. Niezbędne referencje
Metoda ta wymaga ustanowienia referencji do biblioteki 'Microsoft Forms 2.0 Object Library'. W tym celu w edytorze VBA wybieramy kolejno Menu >> Tools >> References >> odszukujemy i zaznaczamy w/w bibliotekę.
Wskazówka! Jeżeli w naszym projekcie utworzony jest choćby jeden UserForm oznaczać to będzie, że odpowiednie referencje zostały ustanowione.

2. Tworzenie instancji obiektu DataObject
Praca ze schowkiem wymagać będzie utworzenia obiektu, który umożliwi przekazywanie wartości. Poniższe linie tworzą tzw. wiązanie wczesne (early binding) do obiektu DataObject.

1Dim tmpDO As DataObject
2Set tmpDO = New DataObject

3. Dodanie tekstu do schowka
To pierwsza sytuacja, w której wykorzystamy uprzednio utworzony obiekt. W pierwszej kolejności zdefiniujemy jaki tekst ma trafić do schowka, ale dopiero kolejna linia procedury skieruje strumień tekstu w tą przestrzeń pamięci.

1tmpDO.SetText "Ten tekst trafi do schowka!"
2tmpDO.PutInClipboard

4. Pobranie wartości ze schowka
Także i w tym przypadku  niezbędne będą 2 linie kodu- pierwsza pobiera zawartość schowka do naszego obiektu, a kolejne linie prezentują różne warianty skierowania strumienia tekstu: do okna immediate, do komórki czy też do zakresu komórek.

1'pobranie ze schowka
2tmpDO.GetFromClipboard
3 
4'przekazanie do różnych obszarów
5Debug.Print tmpDO.GetText
6Range("A1") = tmpDO.GetText
7Range("B1:B10") = tmpDO.GetText

5. Uwagi końcowe. 
Wykorzystanie obiektu DataObject umożliwia, przynajmniej na chwilę obecną, pracę wyłącznie z tekstem. Zawartość tego obiektu przechowywana jest tak długo jak długo istnieje obiekt. Zawartość przekazana do schowka pozostaje w nim także po wykasowaniu instancji obiektu DataObject.

Brak komentarzy:

Prześlij komentarz