Este artigo demonstrará como usar o VBA para copiar itens para a área de transferência.
Pode haver um momento em que desejamos copiar as informações no Excel VBA e armazená-las para uso em outro aplicativo ou em outro momento quando a macro do Excel for interrompida. Depois que uma macro para de ser executada, as informações armazenadas em uma variável ou variáveis deixam de existir e não podem mais ser recuperadas. Uma forma de resolver esse problema seria copiar essas informações para a área de transferência.
Copiando para a área de transferência usando a biblioteca de objetos HTML
A maneira mais simples de usar a área de transferência no Excel VBA é chamar a Biblioteca de objetos HTML.
1234567 | Sub StoreData ()Dim varText As VariantDim objCP As ObjectvarText = "Algum texto copiado"Definir objCP = CreateObject ("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "text", varTextEnd Sub |
Como estamos usando a vinculação tardia declarando a variável objCP como um objeto, não precisamos adicionar uma referência ao Excel para fazer esse procedimento funcionar.
Se agora mudássemos para nossa planilha Excel e clicássemos em Colar, o texto “Alguns dados copiados” seria inserido na célula selecionada.
Se tivéssemos que transformar este procedimento acima em uma função, poderíamos passar o texto a ser copiado como uma variável.
12345 | Função StoreData (varText As Variant) como StringDim objCP As ObjectDefinir objCP = CreateObject ("HtmlFile")objCP.ParentWindow.ClipboardData.SetData "text", varTextFunção Final |
Poderíamos então chamar essa função várias vezes em nosso código VBA conforme e quando precisarmos copiar o texto para a área de transferência. O texto não seria, portanto, embutido no código VBA.
123 | Sub CopyData ()StoreData "Algum texto copiado"End Sub |
Também podemos usar o objeto HTML para retornar o texto da área de transferência - ou seja, colar. Para isso, usamos o método GetData em vez do método SetData.
12345 | Função ReturnData ()Dim objCP As ObjectDefinir objCP = CreateObject ("HtmlFile")ReturnData = objCP.parentWindow.clipboardData.GetData ("text")Função Final |
Podemos então chamar esta função para retornar os dados armazenados na área de transferência.
123 | Sub PasteData ()MsgBox ReturnDataEnd Sub |
Um truque interessante seria combinar as 2 funções juntas para que pudéssemos usar a mesma função para copiar e colar dados, dependendo se enviamos ou não dados para a área de transferência, ou se desejamos recuperar dados da área de transferência.
1234567891011 | Função StoreOrReturnData (Opcional strText As String) As StringDim varText As VariantDim objCP As ObjectDefinir objCP = CreateObject ("HtmlFile")varText = strTextSe strText "" EntãoobjCP.ParentWindow.ClipboardData.SetData "text", varTextOutroStoreOrReturnData = objCP.ParentWindow.ClipboardData.GetData ("text")Fim seFunção Final |
No código acima, podemos tornar a variável strText opcional - isso significa que se desejarmos copiar os dados, incluiremos o texto a ser copiado, mas se desejarmos colar os dados, iremos excluí-lo.
Em seguida, atribuiremos a variável string (strText) a uma variável Variant para que ela seja armazenada no método SetData do objeto Arquivo HTML.
Para copiar os dados, podemos usar este procedimento, note que estamos incluindo o texto a ser copiado.
123 | Sub CopyData ()StoreOrReturnData "SomeCopiedText"End Sub |
Para colar os dados, podemos usar este procedimento. A caixa de mensagem mostrará o valor armazenado na área de transferência.
123 | Sub PasteData ()MsgBox StoreOrReturnDataEnd Sub |