VBA GetObject

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

Você pode baixar este modelo GetObject do VBA aqui - Modelo GetObject do 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 a função CreateObject e GetObject no VBA.

As etapas seriam:

  • Crie um arquivo excel e salve o arquivo com a extensão .xlsm excel (Excel Macro-Enabled Workbook), pois precisaremos executar o código VBA (uma macro).
  • Abra o editor visual basic 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 armazenar os objetos (documento do MS Word e objeto de aplicativo do MS Word) e uma 'Variável de string' para armazenar o nome do documento de onde precisamos extrair as tabelas.

  • Para tratamento de erros, adicionaremos uma instrução, esta instrução informa ao programa VBA para ignorar o erro e retomar a execução com a próxima linha de código. A declaraçã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 for o caso, não há instância atual do Aplicativo MS Word ou o componente ActiveX não pode criar um objeto ou retornar referência a este objeto entã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 word do qual queremos importar as tabelas para uma planilha 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 “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, vamos criar 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 não houver nenhuma tabela no documento, então 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 cada coluna na 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 abrirmos o arquivo excel, o preenchimento será 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 erros On Error Resume Next Rem Ativando MS Word se houver 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 retorna sempre a mesma instância quando é chamada com uma string de comprimento zero e ocorre um erro se o argumento 'nome do caminho' não for mencionado.
  2. Não podemos usar GetObject para acessar uma referência a uma classe criada com VBA.
  3. Se for o caso, não há instância ativa do aplicativo MS Word, ou não queremos o objeto iniciado com um arquivo já carregado, primeiro usamos a função CreateObject para criar o objeto e, em seguida, usamos a função GetObject para acessar o objeto.