VBA Copiar para a Área de Transferência

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on June 7, 2023

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
vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA