locked
Problema com Macro Office 2007 + IE8 RRS feed

  • 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.br
    quarta-feira, 30 de junho de 2010 20:26
    Moderador
  • 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

    http://social.technet.microsoft.com/Forums/pt-BR/winiispt/thread/fede2577-fef2-42c0-b1c7-1ac4898dcdc7

    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