Existem eventos definidos na palavra modelo de objeto vba para esses eventos?

0

Primeiro de tudo, eu olhei e não encontrei nenhum.

Eu quero que uma macro seja executada sempre que uma das situações a seguir acontecer:

  1. O documento é aberto
  2. O documento é salvo
  3. O texto é colado no documento
  4. O documento cresce para uma página a mais.
  5. O documento diminui para uma página a menos.

Para os 2 primeiros há eventos, mesmo que tecnicamente o segundo seja antes de salvar, mas existe para os outros três? Se não, posso de alguma forma adicioná-los?

Com relação ao evento número dois, existe um evento DocumentBeforeSave também quando salvos automaticamente?

    
por Ernst 19.03.2014 / 12:41

2 respostas

1

Você está falando sobre como capturar / interceptar comandos. Você está certo, há eventos para open e save , mas os outros são menos comuns. Aqui está um link para algum código para Catch Paste . Eu sei se se concentra no Excel, mas pode ajudá-lo a ir na direção certa para o que você está tentando fazer.

Além disso, confira Usando o VBA para controlar comandos internos em o 2007 Office System . Há um link neste artigo para Documentação e referências do SDK para desenvolvedores do Office , que também pode ser útil .

Tenha em mente; A execução de macros em um documento salvo pode não funcionar da mesma forma para cada pessoa, a menos que a Segurança da Macro seja definida da mesma forma. Alguns computadores podem bloqueá-los, o que significa que o documento não funcionará como você deseja.

    
por 19.03.2014 / 13:01
1

Acredito que você possa substituir certas funções do VBA nomeando o sub como o nome do método embutido. Nesse caso, isso deve ajudar a capturar o evento.

Sub EditPaste()

Selection.Paste
'Other code

End Sub

Em relação à captura do número de páginas no documento, você pode usar um temporizador para pesquisar o número de páginas e agir se a contagem for alterada:

Private Sub Document_Open()

Application.OnTime When:=Now + TimeValue("00:00:01"), _
Name:="CheckPages"

End Sub

Sub CheckPages()

'
' Get pages using ActiveDocument.ActiveWindow.ActivePane.Pages.Count 
' Compare with page count stored via global variable
' If they don't match run code for your event.

'Rerun the macro in 1 second
Application.OnTime When:=Now + TimeValue("00:00:01"), _
Name:="CheckPages"

End Sub
    
por 19.03.2014 / 23:08