Tento článek předvede, jak pomocí VBA kopírovat položky do schránky.
Může se stát, že budeme chtít zkopírovat informace do aplikace Excel VBA a uložit je pro použití v jiné aplikaci nebo v jiném čase, kdy se přestane spouštět makro aplikace Excel. Jakmile se makro zastaví, informace uložené v proměnné nebo proměnných přestanou existovat a již je nelze načíst. Tento problém lze vyřešit zkopírováním těchto informací do schránky.
Kopírování do schránky pomocí knihovny objektů HTML
Nejjednodušší způsob použití schránky v aplikaci Excel VBA je zavolat knihovnu objektů HTML.
1234567 | Dílčí data obchodu ()Dim varText jako variantaDim objCP jako objektvarText = "Nějaký zkopírovaný text"Nastavit objCP = CreateObject ("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "text", varTextEnd Sub |
Protože používáme pozdní vazbu deklarováním proměnné objCP jako objektu, nepotřebujeme přidat odkaz na Excel, aby tato procedura fungovala.
Pokud bychom nyní přepnuli na náš excelový list a klikli na Vložit, do vybrané buňky by byl vložen text „Některá zkopírovaná data“.
Pokud bychom tento postup výše změnili na funkci, mohli bychom text, který se má zkopírovat, předat jako proměnnou.
12345 | Funkce StoreData (varText As Variant) jako řetězecDim objCP jako objektNastavit objCP = CreateObject ("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "text", varTextKoncová funkce |
Tuto funkci bychom pak mohli v našem kódu VBA volat vícekrát, když potřebujeme zkopírovat text do schránky. Text by proto nebyl pevně zakódován do kódu VBA.
123 | Dílčí kopie dat ()StoreData "Nějaký zkopírovaný text"End Sub |
Můžeme také použít Objekt HTML k vrácení textu ze schránky - tj. Vkládání. K tomu používáme spíše GetData než SetData metodu.
12345 | Funkce ReturnData ()Dim objCP jako objektNastavit objCP = CreateObject ("HtmlFile")ReturnData = objCP.parentWindow.clipboardData.GetData ("text")Koncová funkce |
Tuto funkci pak můžeme zavolat a vrátit data uložená ve schránce.
123 | Sub PasteData ()MsgBox ReturnDataEnd Sub |
Skvělý trik by byl kombinace těchto dvou funkcí dohromady, abychom mohli stejnou funkci použít ke kopírování a vkládání dat, v závislosti na tom, zda data odesíláme do schránky, nebo zda chceme data ze schránky načíst.
1234567891011 | Funkce StoreOrReturnData (volitelný strText jako řetězec) jako řetězecDim varText jako variantaDim objCP jako objektNastavit objCP = CreateObject ("HtmlFile")varText = strTextPokud strText "" PakobjCP.ParentWindow.ClipboardData.SetData "text", varTextJinýStoreOrReturnData = objCP.ParentWindow.ClipboardData.GetData ("text")Konec IfKoncová funkce |
Ve výše uvedeném kódu můžeme nastavit proměnnou strText jako volitelnou - to znamená, že pokud chceme kopírovat data, zahrneme text, který se má zkopírovat, ale pokud chceme data vložit, vyloučíme je.
Řetězcovou proměnnou (strText) pak přiřadíme proměnné Variant, aby byla uložena v metodě SetData objektu souboru HTML.
Chcete -li data zkopírovat, můžeme použít tento postup. Všimněte si, že zahrnujeme text, který se má zkopírovat.
123 | Dílčí kopie dat ()StoreOrReturnData "SomeCopiedText"End Sub |
K vložení dat můžeme použít tento postup. V okně se zprávou se zobrazí hodnota uložená ve schránce.
123 | Sub PasteData ()MsgBox StoreOrReturnDataEnd Sub |