Dit artikel laat zien hoe u VBA kunt gebruiken om items naar het klembord te kopiëren.
Er kan een tijd zijn dat we informatie in Excel VBA willen kopiëren en opslaan voor gebruik in een andere toepassing of op een ander moment wanneer de Excel-macro niet meer wordt uitgevoerd. Zodra een macro niet meer wordt uitgevoerd, houdt de informatie die is opgeslagen in een variabele of variabelen op te bestaan en kan deze niet meer worden opgehaald. Een manier om dit probleem op te lossen zou zijn om deze informatie naar het klembord te kopiëren.
Kopiëren naar het klembord met behulp van de HTML-objectbibliotheek
De eenvoudigste manier om het klembord in Excel VBA te gebruiken, is door de HTML-objectbibliotheek aan te roepen.
1234567 | Sub StoreData()Dim varText As VariantDim objCP als objectvarText = "Sommige gekopieerde tekst"Stel objCP = CreateObject ("HtmlFile") inobjCP.ParentWindow.ClipboardData.SetData "tekst", varTextEinde sub |
Omdat we late binding gebruiken door de variabele objCP als een object te declareren, hoeven we geen verwijzing naar Excel toe te voegen om deze procedure te laten werken.
Als we nu zouden overschakelen naar ons Excel-werkblad en op Plakken zouden klikken, zou de tekst "Sommige gekopieerde gegevens" in de geselecteerde cel worden ingevoegd.
Als we deze procedure hierboven in een functie zouden veranderen, zouden we de te kopiëren tekst als variabele kunnen doorgeven.
12345 | Functie StoreData(varText As Variant) as StringDim objCP als objectStel objCP = CreateObject ("HtmlFile") inobjCP.ParentWindow.ClipboardData.SetData "tekst", varTextFunctie beëindigen |
We zouden deze functie dan meerdere keren in onze VBA-code kunnen aanroepen als en wanneer we tekst naar het klembord moeten kopiëren. De tekst zou daarom niet hard gecodeerd worden in de VBA-code.
123 | Sub CopyData()StoreData "Sommige gekopieerde tekst"Einde sub |
We kunnen ook het HTML-object gebruiken om de tekst van het klembord terug te sturen - dwz Plakken. Hiervoor gebruiken we de GetData in plaats van de SetData methode.
12345 | Functie ReturnData()Dim objCP als objectStel objCP = CreateObject ("HtmlFile") inReturnData = objCP.parentWindow.clipboardData.GetData("text")Functie beëindigen |
We kunnen deze functie dan aanroepen om de gegevens die op het klembord zijn opgeslagen te retourneren.
123 | Sub PasteData()MsgBox ReturnDataEinde sub |
Een leuke truc zou zijn om de 2 functies samen te combineren, zodat we dezelfde functie kunnen gebruiken om gegevens te kopiëren en te plakken, afhankelijk van of we gegevens naar het klembord sturen of niet, of dat we gegevens van het klembord willen ophalen.
1234567891011 | Functie StoreOrReturnData (Optioneel strText As String) As StringDim varText As VariantDim objCP als objectStel objCP = CreateObject ("HtmlFile") invarText = strTextAls strText "" DanobjCP.ParentWindow.ClipboardData.SetData "tekst", varTextAndersStoreOrReturnData = objCP.ParentWindow.ClipboardData.GetData("tekst")Stop alsFunctie beëindigen |
In de bovenstaande code kunnen we de strText-variabele optioneel maken - dit betekent dat als we gegevens willen kopiëren, we de te kopiëren tekst zullen opnemen, maar als we gegevens willen plakken, zullen we deze uitsluiten.
We zullen dan de stringvariabele (strText) toewijzen aan een Variant-variabele zodat deze kan worden opgeslagen in de SetData-methode van het HTML-bestandsobject.
Om de gegevens te kopiëren, kunnen we deze procedure gebruiken, merk op dat we de te kopiëren tekst opnemen.
123 | Sub CopyData()StoreOrReturnData "SomeCopiedText"Einde sub |
Om de gegevens te plakken, kunnen we deze procedure gebruiken. Het berichtvenster toont de waarde die op het klembord is opgeslagen.
123 | Sub PasteData()MsgBox StoreOrReturnDataEinde sub |