VBA GetObject - Como usar a função GetObject no Excel VBA?

Função GETOBJECT do Excel VBA

Podemos usar a função GetObject em VBA no MS Excel para acessar um objeto ActiveX a partir do arquivo excel e então atribuir o objeto a uma variável de objeto. Para usar a tecnologia OLE (Object Linking and Embedding) ou COM (Compound Object Module) para controlar qualquer aplicativo Microsoft como MS Word, MS Outlook, MS PowerPoint e Internet Explorer, etc., podemos usar a função VBA GETOBJECT.

Usamos a função CreateObject para criar o objeto e a função GETOBJECT retorna a referência ao objeto.

Sintaxe para função GETOBJECT

A função GET OBJECT tem estes argumentos nomeados:

  1. Nome do caminho: precisamos especificar o caminho completo e o nome do arquivo que contém o objeto a ser recuperado. Este é um argumento opcional, na verdade, ambos os argumentos na função GetObject são opcionais, mas se 'nome do caminho' for omitido, o segundo argumento 'classe' será necessário.
  2. Classe : Este também é um argumento opcional, conforme especificado anteriormente. Isso aceita uma string que representa a classe do objeto.

Usamos a sintaxe 'appname.objecttype' para especificar o argumento 'class'.

  1. Appname: Precisamos especificar o nome do aplicativo, que fornecerá o objeto.
  2. Tipo de objeto: especificamos o tipo de classe de objeto a ser criado.

Exemplo de função GETOBJECT do Excel VBA

Suponha que temos um documento do Word contendo 3 tabelas.

Queremos escrever um código VBA que importará todas as tabelas do documento para a planilha excel. Para fazer o mesmo, precisaremos usar as funções CreateObject e GetObject no VBA.

As etapas seriam:

  • Crie um arquivo excel e salve o arquivo com a extensão .xlsm excel (pasta de trabalho habilitada para macros do Excel), pois precisaremos executar o código VBA (uma macro).
  • Abra o editor visual básico com uma tecla de atalho (Alt + F11) ou usando o comando 'Visual Basic' no grupo 'Código' na guia 'Desenvolvedor' no Excel.
  • Clique duas vezes em 'ThisWorkbook' no lado esquerdo do editor VBA e escolha 'Workbook' na lista mostrada a seguir no topo da tela.
  • Escolha 'Abrir' na lista.
  • Agora precisamos escrever o código entre essas duas linhas.
  • Primeiro, declararemos variáveis ​​para conter os objetos (documento do MS Word e objeto de aplicativo do MS Word) e uma 'Variável de string' para conter o nome do documento de onde precisamos extrair as tabelas.
  • Para tratamento de erros, adicionaremos uma instrução. Essa instrução informa ao programa VBA para ignorar o erro e retomar a execução com a próxima linha de código. A instrução “On Error Resume Next” não corrige os erros de tempo de execução, mas simplesmente significa que a execução do programa continuará a partir da linha seguinte à linha que causou o erro.
  • Agora usaremos a função GetObject para obter acesso à instância atual do Word Application Object.
  • Se no caso não houver instância atual do Aplicativo MS Word, ou o componente ActiveX não puder criar um objeto ou retornar referência a este objeto, ocorre o erro 429. Para isso, adicionaremos abaixo duas linhas no código. Depois de lidar com o erro, precisamos criar uma instância do objeto Aplicativo do MS Word usando a função CreateObject .
  • Para tornar o aplicativo MS Word visível, mudaremos a propriedade visible do objeto 'WdApp' para TRUE .
  • Precisamos encontrar a localização e o nome do arquivo do documento do Word do qual queremos importar as tabelas para uma planilha do Excel e atribuir o mesmo ao "strDocName". Para encontrar o nome e a localização, podemos verificar as propriedades do Arquivo.

Para abrir a caixa de diálogo 'Propriedades' , basta selecionar o arquivo e pressionar 'Alt + Enter'.

  • Se o arquivo não existir no local especificado, o código retornará a mensagem dizendo: “O arquivo Marks Details não foi encontrado no caminho da pasta.” O título seria “Desculpe, esse nome de documento não existe”.
  • Agora precisamos ativar o aplicativo MS Word e atribuir a variável 'wddoc' com o documento do word com o nome do arquivo armazenado em 'strDocName.'
  • Se o arquivo ainda não estiver aberto, precisamos abrir o documento e ativar o aplicativo.
  • Depois de ativar o documento do Word, precisamos acessar as tabelas do documento. Para fazer o mesmo, criaremos algumas variáveis.

Tble é a variável inteira, que armazenará a contagem de tabelas no documento.

rowWd é a variável longa, que armazenará o número de linhas em uma tabela específica.

colWd é a variável longa, que armazenará o número de colunas em uma tabela específica.

  • Precisamos contar o número de tabelas no documento, e se houver algo notável no documento, exibiremos uma caixa de mensagem para o usuário que “Nenhuma tabela encontrada no documento do Word”.
  • Para acessar tabelas no documento e escrever o conteúdo na planilha do Excel, executaremos um loop VBA 'For' para várias tabelas e, dentro desse loop VBA, executaremos loops 'for' aninhados para acessar todas as linhas e todas as colunas da linha.
  • Como não queremos salvar o documento e encerrar o aplicativo. Devemos também liberar a memória do sistema. Para fazer o mesmo, escreveremos o seguinte código.

Agora, sempre que abrimos o arquivo excel, o preenchimento é atualizado com o conteúdo da tabela do documento do Word.

Código:

Private Sub Workbook_Open () Rem Declarando variáveis ​​de objeto para acessar objeto criado por GETOBJECT Dim WdApp As Object, wddoc As Object Rem Declarando uma variável de string para acessar o documento do Word Dim strDocName As String Rem Tratamento de erro On Error Resume Next Rem Ativando MS Word se já está aberto Set WdApp = GetObject (, "Word.Application") If Err.Number = 429 Then Err.Clear Rem Criando um objeto de aplicativo do Word se o MS Word ainda não estiver aberto Set WdApp = CreateObject ("Word.Application") End If WdApp.Visible = True strDocName = "C: Users CBA7_01 Desktop Marks Details.docx" Rem Verificando o diretório relevante para o documento relevante Rem Se não for encontrado, informar ao usuário e fechar o programa If Dir (strDocName) = " "Then MsgBox" O arquivo "& strDocName & vbCrLf &"não foi encontrado no caminho da pasta "& vbCrLf &" C: Users CBA7_01 . ", _vbExclamation," Desculpe, esse nome de documento não existe. "Sair Sub End If WdApp.Activate Set wddoc = WdApp.Documents (strDocName ) Se wddoc não for nada, defina wddoc = WdApp.Documents.Open ("C: Users CBA7_01 Desktop Marks Details.docx") wddoc.Activate Rem Definindo variáveis ​​para acessar as tabelas no documento do Word Dim Tble As Integer Dim rowWd As Long Dim colWd As Integer Dim x As Long, y As Long x = 1 y = 1 Com wddoc Tble = wddoc.Tables.Count If Tble = 0 Then MsgBox "Nenhuma tabela encontrada no documento do Word", vbExclamation, "Não Tabelas a serem importadas "Exit Sub End If Rem Iniciando o processo de loop para acessar tabelas e suas linhas, colunas For i = 1 To Tble With.Tables (i) For rowWd = 1 To .Rows.Count For colWd = 1 To .Columns.Contar células (x, y) = WorksheetFunction.Clean (.cell (rowWd, colWd) .Range.Text) Rem Acessando a próxima coluna y = y + 1 Próxima colWd Rem Indo para a próxima linha e começando na coluna 1 y = 1 x = x + 1 Next rowWd End With Next End Com Rem não precisamos salvar o documento do word wddoc.Close Savechanges: = False Rem fechamos o aplicativo MS Word WdApp.Quit Rem Finalmente liberamos a memória do sistema alocada para as 2 variáveis ​​de objeto Set wddoc = Nothing Set WdApp = Nothing End SubQuit Rem Finalmente liberamos a memória do sistema alocada para as 2 variáveis ​​de objeto Set wddoc = Nothing Set WdApp = Nothing End SubQuit Rem Finalmente liberamos a memória do sistema alocada para as 2 variáveis ​​de objeto Set wddoc = Nothing Set WdApp = Nothing End Sub

Coisas para lembrar

  1. Há algum objeto de instância única, para o qual apenas uma instância do objeto é gerada, independentemente do número para o qual CreateObject é executado. A função GetObject sempre retorna a mesma instância quando é chamada com uma string de comprimento zero, e ocorre um erro se o argumento 'pathname' não for mencionado.
  2. Não podemos usar GetObject para acessar uma referência a uma classe criada com VBA.
  3. Se no caso, não há instância ativa do aplicativo MS Word, ou não queremos o objeto iniciado com um arquivo já carregado, então primeiro usamos a função CreateObject para criar o objeto e, em seguida, usamos a função GetObject para acessar o objeto .

Artigos interessantes...