Ir ao conteúdo
  • Cadastre-se

Excel Erro tempo de execução '-2147417848 - O método 'Add' do objeto 'ListRows' falhou


Ir à solução Resolvido por BiaMidori,

Posts recomendados

Olá, pessoal, bom dia!

 

Construí um código que possibilita ao usuário adicionar e alterar itens de uma lista suspensa diretamente por um UserForms, sem precisar manipular a tabela. Os códigos funcionam, mas somente até certo momento. Depois começam a aparecer erros, as vezes meu arquivo de excel é inclusive fechado. Não estou entendo a causa. Inicialmente apareceu o erro:

 

"Erro em tempo de execução '-2147417848 (80010108) 'O método 'Add' do objeto 'ListRows' falhou.


Vi que uma das possíveis causas poderia ser a quantidade de variáveis utilizada e a definição para elas utilizadas. Tentei reduzi-las e, se usadas, defini-las corretamente. Com isso, testei novamente e novamente funcionou até um momento, depois tive erro. Esta é a linha que está dando problema
Set NovaLinha = Tabela2.ListRows.Add

 

Alguém saberia me dizer o que preciso fazer para corrigir? 

OBS: O usuário manipula o UserForm na Planilha1 e as informação são armazenada na Planilha2.Sistema 32 bts.

----------------------
Eis o código abaixo:


Private Sub btn_adicionarcodigo_Click()

 

Dim a As String
a = combobox_nome.Value
Dim oRange As Range
Set oRange = Planilha2.Range("E:AE").Find(what:=a, lookat:=xlPart)

 

If a = oRange.Value Then

Dim Tabela2 As ListObject 


Dim NovaLinha As ListRow
Set Tabela2 = Planilha2.ListObjects("T" & a) 
Set NovaLinha = Tabela2.ListRows.Add


NovaLinha.Range(1, 1) = Me.box_codigo
                    
Me.box_codigo = ""
 

End Sub

Link para o comentário
Compartilhar em outros sites

Bom dia, @BiaMidori

 

Esse é um erro de diagnóstico geralmente difícil e tem a ver com Userforms versus criação de novos objetos (.Add), sejam eles controles, shapes, etc. Não tinha visto acontecer ainda com simples adição de linha em ListObject.

Tente contornar o problema ativando a planilha imediatamente antes de começar a adicionar a linha.

Se possível, anexe seu modelo problemático para darmos uma olhada... 👍

 

____________

P.S.: ia me esquecendo: outra coisa que recomendo principalmente em códigos mais extensos e com sucessivas edições/reedições é fazer uma faxina de vez em quando indo no núcleo do código no arquivo, usando a antiga e bem conhecida ferramenta "Excel VBA Code Cleaner" do Rob Bovey. Ela é um suplemento gratuito para o VBA e após instalada fica disponível no menu Ferramentas>Clean Project do VBE. Infelizmente só está disponível para o Office instalado na versão 32bits. você encontra ela no site oficial em: Excel VBA Code Cleaner

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@Edson Luiz Branco Eu criei um novo documento, diminui o número de variáveis, e adicionei a função Application.ScreenUpdating = False no início do código e Application.ScreenUpdating = True no final do código. Coloquei as variáveis também depois do With Planilha1. Não descobri exatamente a causa, e não sei exatamente qual foi a solução, mas agora está funcionado, rsrs. Obrigada!

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

@BiaMidori @Edson Luiz Branco
Olá, pessoal!

 

Estou com o mesmo problema, não sei como faço para arrumar e preciso de ajuda.

O problema só ocorre quando eu, via botão do formulário, chamo a macro que insere a linha na tabela. Se eu simplesmente rodar a macro não há problema algum, porém se eu rodar ela via um 'call' do botão, o Excel dá esse erro e simplesmente fecha.

 

Conto com a ajuda de vocês,

Gabriel

Link para o comentário
Compartilhar em outros sites

Consegui arrumar!

Primeiro descobri o motivo do erro estar acontecendo (mais ou menos). Eu tinha, no meu UserForm, uma referência, em uma Listbox, à minha tabela. Sempre que eu inseria uma linha na tabela acontecia algum conflito com o Listbox e dava erro.

Pra arrumar tive que referenciar o valor da tabela para a Listbox de uma forma diferente. Antes eu simplesmente colocava: ...rowsource = "[nome da tabela]"

Agora tive que usar: Me.lista_tblfDieta.List = TabelaDieta.DataBodyRange.Value — sendo lista_tblfDieta o nome da minha listbox, e 'TabelaDieta' o nome da variável que eu dei para a tabela, sendo: 'Dim TabelaDieta as ListObject'.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!