Font Size

Profile

Menu Style

Cpanel

28Maio2017

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 Utilizando o evento WindowSelectionChange para mostrar um popup de opções
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.

Utilizando o evento WindowSelectionChange para mostrar um popup de opções

O exemplo anterior é bastante simples e não há segredo algum. Vejamos agora como elevar o exemplo ao próximo nível. Suponha que ao invés de simplesmente selecionar e modificar diretamente, nós desejamos mostrar um menu popup, como proceder?

Assim como no exemplo anterior, precisaremos de uma classe. Porém, precisaremos também de um módulo comum no projeto.

Vamos iniciar pelo ThisDocument onde inseriremos o código de praxe mais um código para remoção do menu:

Option Explicit

' Dimensiona o objeto
Dim appWrd As New clsEventos

Private Sub Document_Close()
On Error Resume Next
' Remove o menu popup quando o documento é fechado
' O nome "POPUPNOME" é uma variável global declarada no módulo
Application.CommandBars(POPUPNOME).Delete
End Sub

Private Sub Document_Open()
' Inicializa a classe
Set appWrd.appWord = Application

' Chama a rotina de criação do menu
Call Menus
End Sub

Nosso próximo passo requer a criação da rotina que montará o menu e efetuará as mudanças no texto (neste caso alternar entre negrito e itálico). Adicione o seu módulo onde as seguintes rotinas devem ser entradas:

Option Explicit

' Nome do menu. O nome é uma string constante (Const)
' pública a qual pode ser utilizada em qualquer parte
' do projeto
Public Const POPUPNOME As String = "MEU POPUP"

Sub menus()
' Declaração da barra de comando a ser utilizada como
' o menu popup
Dim cmdbar As CommandBar

' Declaração do botão que será utilizado no popup
Dim btn As CommandBarButton

' Remove o menu popup caso ele existe. Se não existir
' então haverá um erro, por isso é utilizado "On Error Resume Next"
On Error Resume Next
Application.CommandBars(POPUPNOME).Delete

' Cria o popup
Set cmdbar = Application.CommandBars.Add(Name:= _
POPUPNOME, Position:=msoBarPopup)

' Cria os botões que aparecerão após a seleção
' do texto na janela ativa
Set btn = cmdbar.Controls.Add(Type:=msoControlButton)
With btn
' Rótulo do botao
.Caption = "Negrito"

' ID do ícone do botao (113 refere-se ao "N" de negrito
.FaceId = 113

' Estilo do botao
.Style = msoButtonIconAndCaption

' Quando clicado, o botao deve acionar a rotina "Negrito"
.OnAction = "Negrito"
End With

' Veja explicacoes acima
Set btn = cmdbar.Controls.Add(Type:=msoControlButton)
With btn
.Caption = "Itálico"
.FaceId = 114
.Style = msoButtonIconAndCaption
.OnAction = "Itálico"
End With

End Sub

Sub Negrito()
' Alterna entre negrito e normal
ActiveWindow.Selection.Font.Bold = Not ActiveWindow.Selection.Font.Bold
End Sub

Sub Itálico()
' Alterna entre itálico e normal
ActiveWindow.Selection.Font.Italic = Not ActiveWindow.Selection.Font.Italic
End Sub

Finalmente, precisamos adicionar a classe a qual utilizaremos para controlar o evento de seleção. Esta é, na verdade, a parte mais simples do código, pois tudo que desejamos é saber quando algo foi selecionado.

Aqui, iremos ativar o menu popup quando a seleção for maior do que 1:

Option Explicit

Public WithEvents appWord As Word.Application
Private Sub appWord_WindowSelectionChange(ByVal Sel As Selection) ' Se a seleção for maior do que 1, então If Len(Sel) > 1 Then ' Mostrar o popup Application.CommandBars(POPUPNOME).ShowPopup End If End Sub

Como este evento é válido para todos os documentos abertos, o menu popup será acionado sempre que o número de caracteres da seleção for maior do que 1. Clique aqui para ler as partes anteriores deste curso!