W tym artykule zademonstrujemy, jak używać VBA do kopiowania elementów do schowka.
Może zaistnieć sytuacja, w której chcemy skopiować informacje w Excel VBA i przechowywać je w celu użycia w innej aplikacji lub w innym momencie, gdy makro Excel przestanie działać. Gdy makro przestanie działać, informacje przechowywane w zmiennej lub zmiennych przestają istnieć i nie można ich już pobrać. Sposobem na rozwiązanie tego problemu byłoby skopiowanie tych informacji do schowka.
Kopiowanie do schowka przy użyciu biblioteki obiektów HTML
Najprostszym sposobem korzystania ze schowka w Excel VBA jest wywołanie Biblioteki obiektów HTML.
1234567 | Dane magazynu podrzędnego()Dim varText jako wariantDim objCP jako obiektvarText = "Niektóre skopiowany tekst"Ustaw objCP = CreateObject("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "tekst", varTextNapis końcowy |
Ponieważ używamy późnego wiązania, deklarując zmienną objCP jako obiekt, nie musimy dodawać odwołania do programu Excel, aby ta procedura działała.
Gdybyśmy mieli teraz przejść do naszego arkusza programu Excel i kliknąć Wklej, tekst „Niektóre skopiowane dane” zostałby wstawiony do wybranej komórki.
Gdybyśmy mieli zmienić powyższą procedurę w funkcję, moglibyśmy przekazać tekst do skopiowania jako zmienną.
12345 | Function StoreData(varText As Variant) jako StringDim objCP jako obiektUstaw objCP = CreateObject("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "tekst", varTextKoniec funkcji |
Moglibyśmy wtedy wielokrotnie wywoływać tę funkcję w naszym kodzie VBA, gdy musimy skopiować tekst do schowka. Tekst nie byłby zatem na stałe zakodowany w kodzie VBA.
123 | Sub CopyData()StoreData "Niektóre skopiowany tekst"Napis końcowy |
Możemy również użyć obiektu HTML do zwrócenia tekstu ze schowka - np. Wklejanie. W tym celu używamy GetData zamiast metody SetData.
12345 | Funkcja ReturnData()Dim objCP jako obiektUstaw objCP = CreateObject("HtmlFile")ReturnData = objCP.parentWindow.clipboardData.GetData("tekst")Koniec funkcji |
Możemy wtedy wywołać tę funkcję, aby zwrócić dane przechowywane w schowku.
123 | Sub WklejDane()MsgBox ReturnDataNapis końcowy |
Sprytną sztuczką byłoby połączenie tych dwóch funkcji, abyśmy mogli użyć tej samej funkcji do kopiowania i wklejania danych, w zależności od tego, czy wysyłamy dane do schowka, czy też chcemy pobrać dane ze schowka.
1234567891011 | Funkcja StoreOrReturnData(Opcjonalne strText As String) As StringDim varText jako wariantDim objCP jako obiektUstaw objCP = CreateObject("HtmlFile")zmiennaTekst = strTekstJeśli strText "" WtedyobjCP.ParentWindow.ClipboardData.SetData "tekst", varTextW przeciwnym razieStoreOrReturnData = objCP.ParentWindow.ClipboardData.GetData("tekst")Zakończ, jeśliKoniec funkcji |
W powyższym kodzie możemy uczynić zmienną strText opcjonalną - oznacza to, że jeśli chcemy Skopiować dane, dołączymy tekst do skopiowania, natomiast jeśli chcemy Wkleić dane, to go wykluczymy.
Następnie przypiszemy zmienną łańcuchową (strText) do zmiennej Variant, aby była przechowywana w metodzie SetData obiektu pliku HTML.
Aby skopiować dane, możemy skorzystać z tej procedury, pamiętaj, że dołączamy tekst do skopiowania.
123 | Sub CopyData()StoreOrReturnData "SomeCopiedText"Napis końcowy |
Aby wkleić dane, możemy skorzystać z tej procedury. Okno komunikatu pokaże wartość zapisaną w schowku.
123 | Sub WklejDane()MsgBox StoreLubReturnDataNapis końcowy |