Font Size

Profile

Menu Style

Cpanel

18Novembro2017

MS Office Gurus

Onde os desenvolvedores Office se encontram

  • Criar conta
    *
    *
    *
    *
    *
    *

    Campos marcados com asterisco (*) são obrigatórios.

Você está aqui: Home Artigos Microsoft Office Word
Mensagem
  • Kunena is not installed or the installed Kunena version is not supported. The plug-in has now been disabled. Please install/upgrade Kunena to version 1.7 for the Kunena Discuss Plug-in to function properly.

Evento “WindowSelectionChange”

O evento WindowSelectionChange ocorrerá quando a seleção da janela atual (documento ativo) for modificada. Podemos utilizar este evento para várias coisas.

Suponha que após a seleção você queira mostrar uma mensagem, ou menu popup (ou barra de ferramenta), ou passar uma mensagem.

Suponha ainda que após a seleção de um texto qualquer você queira modificar o texto entre negrito e normal. Ou seja, se o texto está negrito, ele ficará normal e vice-versa.

Para criar tal cenário o leitor precisará criar um módulo de classe chamado clsEventos.

Vejamos, então, um exemplo simples de como proceder. Primeiramente, adicione o seguinte código ao objeto ThisDocument para que a classe possa ser iniciada quando o mesmo for aberto:

Option Explicit Dim appWrd As New clsEventos

Private Sub Document_Open()
Set appWrd.appWord = Application End Sub

Abra a classe de eventos onde o seguinte código deve ser inserido:

Option Explicit
Private Sub appWord_WindowSelectionChange _
        (ByVal Sel As Selection)
   
      Sel.Font.Bold = Not Sel.Font.Bold
End Sub

O leito deve notar que este código terá efeito sobre todos os documentos, pois o que está sendo controlado é o evento de mudança de seleção na janela ativa.

Neste exemplo, não determinamos o comprimento da seleção, por exemplo. Poderíamos determinar que somente se a seleção contiver certo número de caracteres ela deve ser alternada entre negrito e normal.

No próximo artigo voce verá como expandir esta idéia.

Clique aqui para ler as partes anteriores deste curso!

  • Escrito por Robert Martim
  • Acessos: 3362
Tabela para inserção da numeração

Evento “DocumentBeforePrint”: criando um controle de impressão

Neste tópico veremos como criar um evento para controlar impressão de um documento.

Suponha que você tenha um recibo o qual deve ser incrementado sempre que uma impressão é efetuada. O problema óbvio que temos é que o usuário pode cancelar a impressão. Neste caso, não bastaria apenas utilizar o evento, pois não iríamos capturar o cancelamento (o qual também faria parte do evento) para não adicionarmos 1 à contagem.

Para criar tal cenário o leitor precisará:

  • Adicionar uma pequena tabela (grande o suficiente para entrar o número);
  • Adicionar um módulo de classe e chamá-lo de clsEventos;
  • Adicionar um módulo comum (o nome não importa).

A tabela deverá ser algo como:

Como o documento provavelmente será um formulário, então o leitor deve utilizar a célula da tabela que deve conter o contador. A definição da posição onde o contador deve ser posicionado ficará por conta do leitor, mas este exemplo é suficiente para determinar tal posição.

O primeiro passo requer a inserção do código que irá iniciar a classe. Portanto, abra o VBE e ThisDocument onde o seguinte código deve ser entrado:

Option Explicit
' Dimensiona o objeto appWrd como sendo uma nova classe
' igual a clsEventos

Dim appWrd As New clsEventos

PrivateSub Document_Open()

' Seta o aplicativo para manipular o evento
Set appWrd.appWord = Application
End Sub

O próximo passo requer a inserção do módulo de classe. Adicione o módulo e lembre-se de modificar o nome para clsEventos, pois utilizamos este nome no código anterior. Note que o escopo do evento (WithEvents) é global, isto é, ele aparece fora de qualquer rotina/função e no topo do módulo de classe (explicações estão contidas no código):

OptionExplicit

' Define o evento público para o aplicativo
PublicWithEvents appWord As Word.Application

' Evento disparado antes da impressão
PrivateSub appWord_DocumentBeforePrint(ByVal Doc As Document, _
Cancel As Boolean)

' Em caso de erro ir para o manipulador de erros
On Error GoTo Err_Handler

' Chama a rotina para liberar a impressão controlada pelo
' código

Call imprimir
' Cancela o evento de impressão chamado pelo usuário. Note
' que se este evento não for cancelado haverá duas chamadas de impressão,
' pois possuímos a rotina "imprimir" que chama a impressão também.

Cancel = True

' Sai da rotina para não executar a mensagem abaixo.
Exit Sub

' Em caso de erro, executar esta mensagem e passar a descrição e número
' do erro para o usuário. Modifique para uma mensagem personalizada
' caso queira instruir o usuário a algo.

Err_Handler:
MsgBox Err.Description, vbCritical, Err.Number
End Sub

A classe em si não tem muito a fazer a não ser controlar o evento de impressão.

Leia mais...

  • Escrito por Robert Martim
  • Acessos: 3979
Eventos padrões

Eventos padrões: “Close”, “New” e “Open”

Estes três eventos são o que podemos chamar de “eventos padrões”. O motivo para isso é que estes três eventos estarão disponíveis sem que o leitor precise fazer nada.

Para acessar tais eventos abra o VBE e em seguida abra a janela de código para ThisDocument. Na janela há o objeto Document e para ele há vários eventos dentre os quais estão inclusos os três eventos em questão:

A seguir discuto cada um dos três eventos acima separadamente com exemplos simples de como utilizá-los.

O evento bastante importante é o evento “Open”. Este evento nos permitirá iniciar classes quando o documento é aberto. Utilizo este método em todos os exemplos deste curso.

Evento padrão “Close”

Vamos supor que você queira avisar que o documento está para ser fechado quando o usuário pressionar CTRL+W ou for a Arquivo --> Fechar. Neste caso, poderíamos escrever o seguinte código:

Private Sub Document_Close()
MsgBox "O documento " & ThisDocument.Name & " será fechado.", vbInformation
End Sub

Quando o documento é fechado nós capturamos o evento e neste caso uma mensagem é passada ao usuário:


Mensagem de captura do evento “Close”

Leia mais...

  • Escrito por Robert Martim
  • Acessos: 3564