Inquiridor
Problema com Macro Office 2007 + IE8

Pergunta
-
Olá
Temos um sistema que gerencia documentaçao ISO e alguns documentos possuem macros. Esse sistema (ASP.NET) permite um usuario "baixar" um documento (norma) e visualiza-lo em seu posto. Tudo funcionava muito bem antes de começarem a instalar o Office 2007.
O que ocorre?
Se o usuario clica no link do documeto e pede para salva-lo (para depois abrir no word) funciona tudo bem. O problema ocorre quando ele pede para abrir direto.
O erro é: 4248 - This command is not available because no document is open.
E eu tenho que fechar o Word via Task Manager.
O que eu notei é que o problema é que quando o usuário pede para abri-lo direto o arquivo é salvo em "tempory internet files" e aparentemente ele tenta ser aberto dentro do proprio IE e nao no word.
Estaçoes onde tem o Word Viewer 2007 instalado, funcionam normalmente. Estaçoes onde tem outras versoes do Word (2003 e XP) tambem funcionam.
Agora eu nao sei se isso é um problema do Office 2007 ou do IE8, porque com o Firefox ou Chrome, também funciona.
A parte da Macro que nao esta funcionando é (vou colocar somente o trecho que dá erro)
Private Sub Document_Open()
' Guarda a opçao ReplaceSelection que tem influencia
' sobre o comportamento da instruçao 'TypeText'.
lb_ReplaceSelection = Options.ReplaceSelection
End Sub
Como o Word nao esta aberto, Options nao existe ainda....
Alguem saberia me dizer porque o Word 2007 possui esse comportamento?
Grato pela atençao
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
SOGI INFORMATIQUE LTÉE (http://www.sogi.com)segunda-feira, 28 de junho de 2010 13:18
Todas as Respostas
-
Olá William,
é um problema difícil de entender por que ocorre. Eu tive este tipo de erro a partir de add-in do Word 2007. O código do add-in fazia referência ao "ActiveDocument" mas, por alguma razão (que não investiguei a fundo, pois não me interessava), o Word entendia que não existia documento ativo. No seu caso não deveria acontecer o mesmo porque o evento Open já foi disparado, ou seja, o Word começou a abrir o doc.
Não vi seu código inteiro para saber se ele faz referência ao ActiveDocument do Application ou se ele deriva todos os comandos do objeto ThisDocument (que seria o preferível).
No meu caso, mudei parte da lógica para o evento WindowActivate do objeto Application (sempre lembrando que se tratava de um add-in que funcionava para vários documentos).
Bem, estou colocando apenas algumas informações que podem ajudar a identificar a origem do problema, mas não o resolvem.
Outra ideia, que nada tem a ver com a anterior: se você abre um arquivo Excel (xls) a partir do site de um banco, por exemplo, o Excel exibe mensagem de erro por considerar xls perigoso. No Excel 2003 não ocorre este problema. A correção é criar um DWORD na chave de registro, conforme passos abaixo:
[HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security]
“ExtensionHardening”=dword:00000000
1. Open your Registry (Start -> Run -> regedit.exe)
2. Navigate to HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\OFFICE\12.0\EXCEL\SECURITY
3. Right click in the right window and choose New -> DWORD
4. Type “ExtensionHardening” as the name (without the quotes)
5. Verify that the data has the value “0″Isto, porém, aplica-se ao Excel. No caso do Word, experimente seguir estes passos: http://support.microsoft.com/kb/922849
Luiz Cláudio Cosenza Vieira da Rocha - http://msmvps.com/blogs/officedev - IT Lab www.itlab.com.brquarta-feira, 30 de junho de 2010 20:26Moderador -
Luiz, obrigado pela resposta
Ele faz sim...
Application.ScreenUpdating = False Application.EnableCancelKey = wdCancelDisabled With ActiveDocument .TrackRevisions = False .PrintRevisions = False .ShowRevisions = False End With lb_ReplaceSelection = Options.ReplaceSelection Options.ReplaceSelection = True
Eu pensei que o erro estivesse na linha
lb_ReplaceSelection = Options.ReplaceSelection
Mas lendo o que vc disse é bem possivel que seja o ActiveDocument e Apllication... O problema que é dificil depurar, pois quando "baixo" o documento pelo IE ele nao abre no Word... como eu disse, ele tenta abrir no IE.
Vou mudar o evento de chamada dessa rotina para o WindowActivate e ver no que dá.
Obrigado
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
SOGI INFORMATIQUE LTÉE (http://www.sogi.com)sexta-feira, 2 de julho de 2010 13:01 -
Ola Willian como vai tem como disponibilizar a sua aplicação para nós podermos tentar resolver? Voce poderia passar para o meu email? fabio.baldini@hotmail.com abraços.
Baldini Fabio- Sugerido como Resposta Baldini sexta-feira, 16 de julho de 2010 13:12
- Não Sugerido como Resposta William John Adam Trindade segunda-feira, 2 de agosto de 2010 19:49
sexta-feira, 16 de julho de 2010 13:12 -
Ola Baldini
Desculpe a demora para responder aqui, mas realmente tinha esquecido esse topico. Eu tentei mudar a macro, mas mesmo que isso tivesse solucionado o problema, seria inviavel pois temos clientes com mais de mil documentos diferentes que usam essa macro (nos temos um controle de documetaçao ISO), o que torna inviavel a substituiçao da macro em todos os documentos.
O problema continua, mas eu começo a crer que o problema nao esta no Word e nem no IE8. Creio que o problema esteja no IIS
Aqui esta o link para o modelo de documento que esta dando problema
http://sites.google.com/site/wjatjoi/ExemploErro42482.doc
Se vc abrir esse link no IE8(direto) vc vai notar que o arquivo é aberto e a macro é executada (a macro atualiza alguns campos do documento com base em um arquivo texto, mas eu alterei para utilizar constantes), o que contradiz o meu primeiro post.
Porem se eu copio esse aquivo em um diretorio virtual local (tipo C:\Inetpub\wwwroot\ExemploErro42482.doc) e tento abri-lo atravez do IE (abir e nao salvar) o erro 4248 aparece (detalhe, para o erro aparecer nenhuma instancia do word pode estar aberta).
Resumindo, se:
1- Criar um diretorio virtual que possua um documento word com essa macro
2- chamar http://localhost/ExemploErro42482.doc no IE8 (note que google chrome e firefox o erro nao aparece)
vai ocasionar o erro.
Mas se o arquivo estiver hospedado em um servidor externo, entao o erro nao aparece.
Ja procureri todas as configuraçoes possiveis do IIS, mas nao encontrei nada que possa esclarecer este comportamento.
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
SOGI INFORMATIQUE LTÉE (http://www.sogi.com)segunda-feira, 2 de agosto de 2010 19:49 -
Tente esse código:
Private Sub Document_Open() Dim appWord As Object Dim doc As Object On Error Resume Next Set appWord = GetObject(, "Word.Application") If Err.Number > 0 Then Set appWord = CreateObject("Word.Application") End If appWord.Visible = True If appWord.documents.Count = 0 Then appWord.documents.Add End If On Error GoTo 0 lb_ReplaceSelection = Options.ReplaceSelection End Sub
sexta-feira, 20 de agosto de 2010 00:19 -
Ola Felipe
Eu teste o codigo e nao funcionou totalmente (ainda aparece o erro 4248, mas ao menos o documento é aberto), mas mesmo que funcionasse eu teria que convencer o cliente a modificar a macro de uns 3000 documentos, o que certamente causaria problema.
Eu cheguei a conclusao que o problema nao é a macro e sim o IIS+IE8+Word 2007, e por isso criei esse outro post em um forum mais adequado
Somente nessas condiçoes eu consigo reproduzir o problema. Eu ainda nao abri um chamada na microsoft, porque ainda eu nao descobri um canal, porem ja postei essa mesma duvida no Forum IIS (ingles) e no forum Stackoverflow, sem resposta ainda.
Grato a ajuda de todos...
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
SOGI INFORMATIQUE LTÉE (http://www.sogi.com)sexta-feira, 20 de agosto de 2010 12:44