VBA Copiar para a Área de Transferência
Este artigo demonstrará como usar o VBA para copiar itens para a área de transferência.
Talvez você queira copiar informações no Excel VBA e armazená-las para usá-las em outro aplicativo ou em outro momento quando a macro do Excel parar de ser executada. Quando 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 maneira de resolver esse problema seria copiar essas informações para a área de transferência.
Copiar 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.
Sub ArmazenarDados()
Dim varText As Variant
Dim objCP As Object
varText = "Algum texto copiado"
Set objCP = CreateObject("HtmlFile")
objCP.ParentWindow.ClipboardData.SetData "text", varText
End Sub
Isso usa a ligação tardia declarando a variável objCP como um objeto, portanto, não é necessário adicionar uma referência primeiro.
Se você abrir uma planilha do Excel e clicar em Colar, o texto “Algum texto copiado” será inserido na célula selecionada.
Se você transformar o subprocedimento anterior em uma função, poderá passar o texto para uma variável.
Function ArmazenarDados(varText As Variant) as String
Dim objCP As Object
Set objCP = CreateObject("HtmlFile")
objCP.ParentWindow.ClipboardData.SetData "text", varText
End Function
Assim, será possível chamar essa função várias vezes.
Sub CopiarDados()
ArmazenarDados "Algum texto copiado"
End Sub
Você também pode usar o objeto HTML para retornar o texto da área de transferência, ou seja, colar. Para isso, use o método GetData em vez do método SetData.
Function RetornarDados()
Dim objCP As Object
Set objCP = CreateObject("HtmlFile")
RetornarDados = objCP.parentWindow.clipboardData.GetData("text")
End Function
Em seguida, você pode chamar essa função para retornar os dados armazenados na área de transferência.
Sub ColarDados()
MsgBox RetornarDados
End Sub
Um truque interessante é combinar as duas funções para que você possa usar a mesma função para Copiar e Colar dados, dependendo se os dados são ou não enviados para a área de transferência ou se você deseja recuperar dados da área de transferência.
Function ArmazenarOuRetornarDados(Optional strText As String) As String
Dim varText As Variant
Dim objCP As Object
Set objCP = CreateObject("HtmlFile")
varText = strText
If strText <> "" Then
objCP.ParentWindow.ClipboardData.SetData "text", varText
Else
ArmazenarOuRetornarDados = objCP.ParentWindow.ClipboardData.GetData("text")
End If
End Function
No código acima, a variável strText é opcional, o que significa que você não precisa inserir o valor da variável se quiser apenas colar dados.
Em seguida, atribua a variável tipo String (strText) a uma variável Variant para que ela seja armazenada no método SetData do objeto de arquivo HTML.
Para copiar os dados, você pode usar este procedimento:
Sub CopiarDados()
ArmazenarOuRetornarDados "AlgumTextoCopiado"
End Sub
Esse procedimento mostra uma caixa de mensagem que exibe o valor da área de transferência.
Sub ColarDados()
MsgBox ArmazenarOuRetornarDados
End Sub