VBA – Erro de Automação

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on August 19, 2023

Este tutorial explicará o que significa um erro de automação do VBA e como ele ocorre.

O Excel é composto de objetos – o objeto Workbook, o objeto Worksheet, o objeto Range e o objeto Cell, para citar apenas alguns. Cada objeto tem várias propriedades e métodos cujo comportamento pode ser controlado com o código VBA. Se o código VBA não for programado corretamente, poderá ocorrer um erro de automação. Esse é um dos erros mais frustrantes do VBA, pois muitas vezes pode aparecer sem motivo aparente quando o código parece perfeitamente correto!

(Consulte nosso Guia de tratamento de erros para obter mais informações sobre erros do VBA).

Referência a uma Variável que Não Está Mais Ativa

Um erro de automação pode ocorrer quando você está se referindo a uma pasta de trabalho ou planilha por meio de uma variável, mas a variável não está mais ativa.

Sub TesteAutomacao()
  Dim strArquivo As String
  Dim wb As Workbook
'abrir o arquivo e definir a variável da pasta de trabalho
  strArquivo = Application.GetOpenFilename
  Set wb = Workbooks.Open(strArquivo)
'Fechar a pasta de trabalho
  wb.Close
'tentar ativar a pasta de trabalho
  wb.Activate
End Sub

Quando executarmos o código acima, receberemos um erro de automação. Isso se deve ao fato de termos aberto uma pasta de trabalho e atribuído uma variável a essa pasta. Em seguida, fechamos a pasta de trabalho, mas na próxima linha de código tentamos ativar a pasta de trabalho fechada. Isso causará o erro, pois a variável não está mais ativa.

exemplo-erro-automacao

Se quisermos ativar uma pasta de trabalho, primeiro precisamos ter a pasta de trabalho aberta!

Sobrecarga de Memória

Às vezes, esse erro também pode ocorrer se você tiver um loop e esquecer de limpar um objeto durante o loop. No entanto, isso pode ocorrer apenas algumas vezes e não em outras, o que é um dos motivos pelos quais esse erro pode ser tão incômodo.

Veja, por exemplo, o código abaixo

Sub InserirImagem()
  Dim i As Integer
  Dim shp As Object
  For i = 1 To 100
     With Worksheets("Planilha1")
'set the object variable
        Set shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells(i, "A").Top, Width:=264, Height:=124)
     End With
  With shp
     .Object.PictureSizeMode = 3
'carregar a imagem
     .Object.Picture = LoadPicture("C:\data\image" & i & ".jpg")
     .Object.BorderStyle = 0
     .Object.BackStyle = 0
  End With
 Next i
End Sub

A variável é declarada como um objeto e, em seguida, a palavra-chave SET é usada para atribuir uma imagem ao objeto. Em seguida, o objeto é preenchido com uma imagem e inserido na planilha do Excel, com alguma formatação ocorrendo ao mesmo tempo. Em seguida, adicionamos um loop ao código para inserir 100 imagens na planilha do Excel. Ocasionalmente, isso causa um erro de automação, mas às vezes não – frustrante, não é?

A solução para esse problema é limpar a variável de objeto dentro do loop, definindo o objeto como NOTHING (NADA) – isso liberará a memória e evitará o erro.

Sub InserirImagem()
 Dim i As Integer
 Dim shp As Object
 For i = 1 To 100
    With Worksheets("Planilha1")
'definir a variável de objeto
       Set shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells(i, "A").Top, Width:=264, Height:=124)
    End With
    With shp
       .Object.PictureSizeMode = 3
'carregar a imagem
      .Object.Picture = LoadPicture("C:\data\image.jpg")
      .Object.BorderStyle = 0
      .Object.BackStyle = 0
    End With
'limpar a variável de objeto
    Set shp = Nothing
  Next i
End Sub

Erros de DLL e Atualização do Windows

Às vezes, o erro ocorre e não há nada que possa ser feito no código VBA. Registrar novamente as DLLs que estão sendo usadas, certificar-se de que o Windows está atualizado e, como último recurso, executar uma verificação do Registro são, às vezes, as únicas coisas que podem funcionar para eliminar esse erro.

Uma boa maneira de evitar esse erro é certificar-se de que as armadilhas de erro estejam em vigor usando as rotinas On Error Go To ou On Error Resume Next.

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