VBA – Erro de Automação
In this Article
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.
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.