Erro em tempo de execução 91
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Usuário Madson:
Avelino,
quando tento utilizar o objRibbon.Invalidate para revalidar a ribbon, depois de carregada, recebo a seguinte mensagem:
Erro em tempo de execução "91";
A variável do objeto ou a variável do bloco "With" não definida.
Sendo que a variável objRibbon é definida: Public objRibbon As IRibbonUI e depois setada pela rotina fncRibbon(ribbon As IRibbonUI).
Poderia me dar uma luz, de como resolver isso ou me dizer onde estou errando para que eu possa corrigir?
Suporte:
Madson,
esse erro já aconteceu na primeira tentativa de rodar o aplicativo com a ribbon ou aconteceu depois de alguma alteração específica no projeto? Você especificou o nome da ribbon em Opções > Banco de Dados Atual> Nome da faixa de Opções ?
- Abra o seu projeto no Modo Design.
- Abra o VBA e no menu DEPURAR clique em COMPILAR. Se encontrar algum erro, corrija. Repita o COMPILAR até que não encontre mais erro.
Usuário Madson:
O erro ocorre depois que a ribbon foi carregada, quando tento fazer uma alteração. Exemplo: trocar de usuário ou fazer uma mudança no Xml da ribbon com o usuário logado.
A ribbon está setada em Opções>Bando de dados atual>Nome na faixa de opções.
PS.: o nome da tabela, onde estão gravadas as ribbons, não é a padrão do Microsoft Access (USysRibbons). Coloquei um nome próprio: pds_ribbon.
Estou te enviando um arquivo exemplo.
Suporte:
Madson,
o erro 91 acontece quando não é possível ter acesso a ribbon carregada na memória.
Segue o seu arquivo exemplo adaptado para o teste.
- abra o aplicativo
- uma tela de login será aberta, com a ribbon desabilitada;
- clique no botão logar e sua ribbon será carregada normalmente;
- clique no botão agendar da ribbon;
- um formulário será aberto;
- clique no botão do formulário e observe a Guia Configurações
da ribbon sendo visualizada ou não.
Vamos testar agora uma simulação do erro 91:
- abra o código do botão do formulário de login e altere a posição da linha em vermelho para a última posição.
Private Sub Comando0_Click()
objRibbon.Invalidate
DoCmd.Close acDefault
DoCmd.ShowToolbar "ribbon", acToolbarYes 'posicione esta linha aqui no final
End Sub
- salve e feche o aplicativo;
- reabra o aplicativo;
- clique no botão Logar e veja o erro acontecendo. O motivo é que a ribbon não está disponível (está oculta) no momento da chamada do
Invalidate.
Vamos a outra simulação do erro 91:
- retorne com a posição da linha que alteramos para a parte superior do código.
- vá em Arquivo > Opções > Banco de Dados Atual e apague o campo
Nome da Faixa de Opções;
- feche o aplicativo;
- retorne a abrir o aplicativo. A ribbon não estará disponível, apesar de ser carregada pela função da macro AutoExec;
- abra o formulário frmTeste. Clique no botão Seta Guia
Configurações e veja o erro 91 ocorrido pelo fato da ribbon não estar
disponível naquele momento.
Usuário Madson:
Obrigado Avelino, percebi que a referência à ribbon havia sido perdida, achei que fosse necessário revalidar a carga do objeto: Set objRibbon = ribbon
Bem, coloquei o código DoCmd.ShowToolbar "ribbon",acToolbarYes na frente do objRibbon.Invalidate e a atualização passou.
Estava ocorrendo esse problema também, quando havia a troca do usuário na tela de login. Como fiz a mesma alteração no código, o erro não está mais acontecendo.
Mais uma vez obrigado.
Download
Não há comentário |