Controles ActiveX do Microsoft Excel desativados?

113

Tenho algumas planilhas do Excel que usam caixas de seleção ActiveX para controlar certas atividades. Trabalharam recentemente mas hoje começaram a dar erros. Fui alertado sobre isso por um colega, mas ele ainda estava funcionando no meu computador. Eu verifiquei sua versão do Excel com a minha e a dele era mais recente. Percebi que havia novas atualizações do Windows, então fiz a atualização. Depois de aplicar as atualizações pendentes, agora não funciona mais no meu computador. Não consigo mais marcar as caixas de seleção ActiveX e, como parte da tentativa de depuração, parece que não consigo mais adicionar um controle ActiveX a nenhuma planilha, mesmo a uma nova planilha. Recebo uma caixa de diálogo de erro que diz: "Não é possível inserir o objeto." (Ainda posso adicionar controles de formulário, mas não ActiveX.) Alguém mais experimentou isso após uma atualização recente? Alguma sugestão?

Obrigado,

Mike

Mike Pedersen
fonte
que controle era especificamente? ou você quer dizer ALL activeX?
peege
3 colegas meus também parecem ter esse problema. Suas planilhas usam, eu acho, controles ActiveX - ComboBoxes e Botões. Um deles estava com seu PC trabalhando e, portanto, não obteve as atualizações. Quando ele o recuperou, ele executou os controles com sucesso. Isto é, até que seu PC seja atualizado automaticamente. Agora não. Também não podemos adicionar controles ActiveX às suas planilhas.
Mitchell Kaplan
5
Eu também estou tendo esse problema, assim como todos os usuários da minha empresa. Como a MS poderia lançar uma atualização que quebra os controles ActiveX no Excel? Isso é loucura.
harryg
3
@ vba4all: não, esta é uma questão de programação e pertence aqui.
Harry Johnston
2
@ vba4all: Os controles ActiveX são uma ferramenta de programação - não são? Para que mais você os usaria? Seria diferente se o OP estivesse, por exemplo, perguntando sobre um determinado produto de terceiros (que usa VBA) que parou de funcionar. Mas, neste caso, parece que seu próprio código foi afetado?
Harry Johnston

Respostas:

159

Em outros fóruns, aprendi que isso se deve ao MS Update e que uma boa correção é simplesmente excluir o arquivo MSForms.exd de qualquer subpasta Temp no perfil do usuário. Por exemplo:

C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\MSForms.exd

C:\Users\[user.name]\AppData\Local\Temp\VBE\MSForms.exd

C:\Users\[user.name]\AppData\Local\Temp\Word8.0\MSForms.exd

Obviamente, o aplicativo (Excel, Word ...) deve ser fechado para excluir este arquivo.

John W.
fonte
1
Eu tinha um PC não atualizado. Abri o Excel e consegui adicionar um botão ActiveX. Procurei C: \ Users [user.name] \ AppData \ Local \ Temp \ Excel8.0 \ MSForms.exd, mas não havia nenhuma pasta Excel8.0. Em seguida, executei a atualização do Windows. Tentei novamente adicionar um botão ActiveX à minha planilha e não consegui. Também observei que agora tinha aquele Excel8.0 \ MSForms.exd. Excluí-o e, sem reiniciar, abri o Excel e agora pude adicionar o botão ActiveX. Obrigado!
Mitchell Kaplan
2
Obrigado!! Este processo corrigiu o problema no meu computador. Eu sinto pelos desenvolvedores que têm grandes lançamentos públicos que isso quebra ... Esperançosamente, a MS irá lançar uma correção.
Mike Pedersen
1
Isto não funcionou para mim. Estou restaurando o sistema para 7/12/2014 em um de nossos PCs para ver se isso vai resolver o problema. Também tentei remover um botão e substituí-lo por uma resposta abaixo, mas recebi um pop-up "Não é possível inserir o objeto" ou algo parecido.
alpinista de
1
Para usuários do Windows XP, a subpasta Temp pode ser encontrada aqui: C: \ Documents and Settings \ [user.name] \ Local Settings \ Temp \ Excel8.0 \ MSForms.exd
bjtilley
2
Depois de excluir os arquivos acima, não funcionou para mim, mas eu encontrei esses arquivos na pasta C: / Windows / Temp e os excluí. Então, consegui fazer esse problema funcionar.
QV1
35

Aqui está a melhor resposta que encontrei no Blog da Equipe de Suporte do Microsoft Excel

Para alguns usuários, os controles de formulários (FM20.dll) não estão mais funcionando conforme o esperado após a instalação das atualizações de dezembro de 2014. Ocorrem problemas, por exemplo, ao abrir arquivos com projetos VBA existentes usando controles de formulários, tentar inserir um controle de formulários em uma nova planilha ou executar software de terceiros que possa usar esses componentes.

Você pode receber erros como:

"Não é possível inserir objeto" "Biblioteca de objetos inválida ou contém referências a definições de objetos que não puderam ser encontradas"

Além disso, você pode não conseguir usar ou alterar as propriedades de um controle ActiveX em uma planilha ou receber um erro ao tentar se referir a um controle ActiveX como membro de uma planilha por meio de código. Passos a seguir após a atualização:

Para resolver esse problema, você deve excluir as versões em cache das bibliotecas de tipo de controle (arquivos de extensor) no computador cliente. Para fazer isso, você deve pesquisar seu disco rígido por arquivos com a extensão de nome de arquivo ".exd" e excluir todos os arquivos .exd que encontrar. Esses arquivos .exd serão recriados automaticamente quando você usar os novos controles na próxima vez que usar o VBA. Esses arquivos extensores estarão no perfil do usuário e também podem estar em outros locais, como os seguintes:

% appdata% \ Microsoft \ forms

% temp% \ Excel8.0

% temp% \ VBE

Solução de script:

Como esse problema pode afetar mais de uma máquina, também é possível criar uma solução de script para excluir os arquivos EXD e executar o script como parte do processo de logon usando uma política. O script de que você precisa deve conter as seguintes linhas e precisa ser executado para cada USUÁRIO, pois os arquivos .exd são específicos do USUÁRIO.

del% temp% \ vbe \ *. exd

del% temp% \ excel8.0 \ *. exd

del% appdata% \ microsoft \ forms \ *. exd

del% appdata% \ microsoft \ local \ *. exd

del% appdata% \ Roaming \ microsoft \ forms \ *. exd

del% temp% \ word8.0 \ *. exd

del% temp% \ PPT11.0 \ *. exd

Etapa adicional:

Se as etapas acima não resolverem seu problema, outra etapa pode ser testada (veja o aviso abaixo):

  1. Em uma máquina totalmente atualizada e após remover os arquivos .exd, abra o arquivo no Excel com permissões de edição.

    Abra o Visual Basic for Applications> modifique o projeto adicionando um comentário ou edição de algum tipo a qualquer módulo de código> Debug> Compile VBAProject.

    Salve e reabra o arquivo. Teste a resolução. Se resolvido, forneça este projeto atualizado para usuários adicionais.

    Aviso: Se esta etapa resolver o seu problema, esteja ciente de que, após implantar este projeto atualizado para os outros usuários, esses usuários também precisarão ter as atualizações aplicadas em seus sistemas e arquivos .exd removidos também.

Se isso não resolver o seu problema, pode ser um problema diferente e uma solução de problemas adicional pode ser necessária.

A Microsoft está trabalhando atualmente neste problema. Assista ao blog para atualizações.

Fonte

Jan Moritz
fonte
3
verifique a fonte vinculada, agora ele atualizou a solução de script
peterson
Em minha máquina,% appdata% é definido como "C: \ Usuários \ <usuário atual> \ AppData \ Roaming \", portanto, não há diretório "% appdata% \ microsoft \ local \". Além disso, "% appdata% \ Roaming \ microsoft \ forms \" parece ser redundante, pois "C: \ Users \ <current user> \ AppData \ Roaming \ Roaming \ microsoft \ forms \" e, novamente, esse diretório não existe na minha máquina.
pstraton
15

Era KB2553154 . A Microsoft precisa lançar uma correção. Como desenvolvedores de aplicativos Excel, não podemos acessar todos os computadores de nossos clientes e excluir arquivos deles. Estamos sendo culpados por algo que a Microsoft causou.

Ron R
fonte
1
Também KB2596927 e KB2726958, dependendo da versão do Office que você está executando.
Harry Johnston
13

Sou um desenvolvedor de Excel e definitivamente senti dor quando isso aconteceu. Felizmente, consegui encontrar uma solução alternativa renomeando os arquivos MSForms.exd no VBA mesmo quando o Excel estava em execução, o que também pode corrigir o problema. Os desenvolvedores do Excel que precisam distribuir suas planilhas podem adicionar o seguinte código VBA a suas planilhas para torná-los imunes à atualização do MS.

Coloque este código em qualquer módulo.

Public Sub RenameMSFormsFiles() 
  Const tempFileName As String = "MSForms - Copy.exd"  
  Const msFormsFileName As String = "MSForms.exd"  
  On Error Resume Next 

  'Try to rename the C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\MSForms.exd file  
  RenameFile Environ("TEMP") & "\Excel8.0\" & msFormsFileName, Environ("TEMP") & "\Excel8.0\" & tempFileName 
  'Try to rename the C:\Users\[user.name]\AppData\Local\Temp\VBE\MSForms.exd file  
  RenameFile Environ("TEMP") & "\VBE\" & msFormsFileName, Environ("TEMP") & "\VBE\" & tempFileName 
End Sub  

Private Sub RenameFile(fromFilePath As String, toFilePath As String) 
  If CheckFileExist(fromFilePath) Then 
      DeleteFile toFilePath  
      Name fromFilePath As toFilePath  
  End If  
End Sub

Private Function CheckFileExist(path As String) As Boolean 
  CheckFileExist = (Dir(path) <> "")  
End Function  

Private Sub DeleteFile(path As String) 
  If CheckFileExist(path) Then 
      SetAttr path, vbNormal  
      Kill path  
  End If  
End Sub    

A sub-rotina RenameMSFormsFiles tenta renomear os arquivos MSForms.exd nas pastas C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\e C:\Users\[user.name]\AppData\Local\Temp\VBE\para MSForms - Copy.exd.

Em seguida, chame a sub-rotina RenameMSFormsFiles no início do evento Workbook_Open.

Private Sub Workbook_Open() 
  RenameMSFormsFiles  
End Sub

A planilha tentará renomear os arquivos MSForms.exd quando for aberta. Obviamente, esta não é uma solução perfeita:

  1. O usuário afetado ainda experimentará os erros de controle ActiveX ao executar o código VBA na primeira vez que abrir a planilha. Somente depois de executar o código VBA uma vez e reiniciar o Excel, o problema foi corrigido. Normalmente, quando um usuário encontra uma planilha quebrada, a reação automática é fechar o Excel e tentar abrir a planilha novamente. :)
  2. Os arquivos MSForms.exd são renomeados sempre que a planilha é aberta, mesmo quando não há problemas com os arquivos MSForms.exd. Mas a planilha funcionará bem.

Pelo menos por enquanto, os desenvolvedores do Excel podem continuar a distribuir seu trabalho com essa solução alternativa até que a Microsoft libere uma correção.

Eu postei essa solução aqui .

Yi Hu
fonte
Obrigado Yi. Funcionou para mim, mas eu tive que reiniciar meu Excel 2010 (pode estar relacionado ao fato de que eu estava executando o editor VBA ao mesmo tempo?)
J. Chomel
5

Com o Windows 8.1, não consegui encontrar nenhum arquivo .exd usando a pesquisa do Windows. Por outro lado, um comando cmd dir *.exd /Sencontrou um arquivo em meu sistema.

Marc Thibault
fonte
3

Conselhos em KB e acima não funcionaram para mim. Descobri que se um usuário do Excel 2007 (com ou sem a atualização de segurança; não tenho certeza das circunstâncias exatas que causam isso) salva o arquivo, o erro original retorna.

Descobri que a maneira mais rápida de reparar o arquivo novamente é excluir todo o código VBA. Salve . Em seguida, substitua o código VBA (copiar / colar). Salve . Antes de tentar fazer isso, eu excluo os arquivos .EXD primeiro, caso contrário, recebo um erro ao abrir.

No meu caso, não posso atualizar / atualizar todos os usuários do meu arquivo Excel em vários locais. Como o problema volta depois que alguns usuários salvam o arquivo do Excel, terei que substituir o controle ActiveX por outro.

pghcpa
fonte
2
Nenhuma das sugestões funcionou para mim, exceto salvar o arquivo como um XLSX (removendo todo o código) e, em seguida, colá-lo novamente como você fez - salvando novamente como XLSM. Enorme, MASSIVA dor na bunda Microsoft. Reinstalar o Office também não
resolveu
2

Instruções simplificadas para usuários finais. Sinta-se à vontade para copiar / colar o seguinte.

Veja como resolver o problema quando ele surgir:

  1. Feche todos os programas e arquivos do Office.
  2. Abra o Windows Explorer e digite% TEMP% na barra de endereço e pressione Enter. Isso o levará para a pasta temporária do sistema.
  3. Localize e exclua as seguintes pastas: Excel8.0, VBE, Word8.0
  4. Agora tente usar seu arquivo novamente, não deve haver problemas.

Pode ser necessário esperar até que o problema ocorra para que essa correção funcione. Aplicá-lo prematuramente (antes que o Windows Update seja instalado em seu sistema) não ajudará.

perada
fonte
2

A melhor fonte de informações e atualizações sobre esse problema que pude encontrar está nos Blogs do TechNet »O Blog da Equipe de Suporte do Microsoft Excel (conforme mencionado):

Os controles de formulário param de funcionar após as atualizações de dezembro de 2014 (atualizado em 10 de março de 2015)

Em março de 2015, um hotfix foi lançado , além das instruções automáticas e manuais, e também está disponível no Windows Update.

A última atualização e correção da Microsoft: 3025036 Erro "Não é possível inserir objeto" em uma solução personalizada do Office ActiveX após instalar a atualização de segurança MS14-082

STATUS: Atualização em 10 de março de 2015:

Os hotfixes para esse problema foram lançados nas atualizações de março de 2015 para o Office 2007, 2010 e 2013.

Informações gerais sobre o problema:

Para alguns usuários, os controles de formulário (FM20.dll) não estão mais funcionando conforme o esperado após a instalação das atualizações de segurança do Microsoft Office MS14-082 de dezembro de 2014. Os problemas são encontrados em momentos como quando eles abrem arquivos com projetos VBA existentes usando controles de formulários, tente para inserir um controle de formulários em uma nova planilha ou executar software de terceiros que pode usar esses componentes.

https://technet.microsoft.com/en-us/library/security/ms14-082.aspx

Você pode receber erros como: "Não é possível inserir objeto"; "Biblioteca de objetos inválida ou contém referências a definições de objetos que não puderam ser encontradas"; "O programa usado para criar este objeto é o Formulários. Esse programa não está instalado no seu computador ou não está respondendo. Para editar este objeto, instale o Formulários ou certifique-se de que todas as caixas de diálogo do Formulários estejam fechadas." Além disso, você pode não conseguir usar ou alterar as propriedades de um controle ActiveX em uma planilha ou receber um erro ao tentar se referir a um controle ActiveX como membro de uma planilha por meio de código.

Soluções manuais e adicionais:

Solução de script:

Como esse problema pode afetar mais de uma máquina, também é possível criar uma solução de script para excluir os arquivos EXD e executar o script como parte do processo de logon usando uma política. O script de que você precisa deve conter as seguintes linhas e precisa ser executado para cada USUÁRIO, pois os arquivos .exd são específicos do USUÁRIO.

del %temp%\vbe\*.exd
del %temp%\excel8.0\*.exd
del %appdata%\microsoft\forms\*.exd
del %appdata%\microsoft\local\*.exd
del %temp%\word8.0\*.exd
del %temp%\PPT11.0\*.exd

Etapa adicional:

Se as etapas acima não resolverem seu problema, outra etapa pode ser testada (veja o aviso abaixo):

  1. Em uma máquina totalmente atualizada e após remover os arquivos .exd, abra o arquivo no Excel com permissões de edição.

  2. Abra o Visual Basic for Applications> modifique o projeto adicionando um comentário ou edição de algum tipo a qualquer módulo de código> Debug> Compile VBAProject.

  3. Salve e reabra o arquivo. Teste a resolução.

Se resolvido, forneça este projeto atualizado para usuários adicionais.

Aviso: Se esta etapa resolver o seu problema, esteja ciente de que, após implantar este projeto atualizado para os outros usuários, esses usuários também precisarão ter as atualizações aplicadas em seus sistemas e arquivos .exd removidos também.

dePatinkin
fonte
1

Finalmente encontrei esta resposta na base de conhecimento oficial da Microsoft:

http://support.microsoft.com/kb/3025036/EN-US

Nenhuma informação nova aqui além das respostas anteriores, mas pelo menos reconhece que a Microsoft está ciente do problema.

Mike Pedersen
fonte
0

Eu sei que muitas respostas já foram postadas para isso, mas nenhuma delas funcionou independentemente para o meu site. Então aqui está o que funcionou para mim:

Etapa 1: desinstale as seguintes atualizações - KB2920789, KB2920790, KB2920792, KB2920793, KB2984942, KB2596927

Etapa 2: ocultar essas atualizações para que não sejam instaladas nas reinicializações subsequentes

Etapa 3: exclua a pasta Excel8.0 de C: \ Users \ <> \ AppData \ Local \ Temp

Etapa 4: reinicie a estação de trabalho (eu também certificaria que os KBs mencionados acima não foram aplicados inadvertidamente)

Chaltahai
fonte
0

Eu quero dar uma resposta que funcionou como a única coisa para mim (eu percebo que posso ser o único). Eu tinha em uma macro que estava chamando usando a faixa de opções. Ele tinha o seguinte código:

colStore = new Collection

Eu não sabia que isso gerava um erro, então fiquei perplexo e tentei de tudo aqui. O botão simplesmente parou de funcionar e eu não conseguia fazê-lo funcionar. Quando percebi o erro e o corrigi para:

Set colStore = new Collection

Começou a funcionar novamente. Absolutamente estranho se você me perguntar, mas talvez ajude alguém lá fora que estava tão desesperado quanto eu.

Espúrio
fonte