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:
- 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.
- 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'.
- Appname: Precisamos especificar o nome do aplicativo, que fornecerá o objeto.
- 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
- 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.
- Não podemos usar GetObject para acessar uma referência a uma classe criada com VBA.
- 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 .