Font Size

Profile

Menu Style

Cpanel

21Fevereiro2019

MS Office Gurus

Onde os desenvolvedores Office se encontram

  • Criar conta
    *
    *
    *
    *
    *
    *

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

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.

Criando Efeitos Visuais em Userforms

O VBA utiliza como biblioteca de interface padrão o MSForms 2.0. Trata-se de um conjunto de controles e objetos os quais são utilizados para construir a interface visual de uma aplicação VBA com o usuário.

O Userform em particular, é a tela principal onde são adicionados e organizados os demais controles como Textbox, Combobox, Buttons, etc.,

Mas diferentemente dos aplicativos criados em VB, o Userform possui algumas limitações em relação a esse último no que diz respeito ao comportamento da tela.

Em formulários VB, é possível, através da própria janela de propriedade, atribuir as caraterísticas comuns à janelas do Windows como por exemplo : Botões Minimizar, Maximizar, Fechar; Ícone na barra de titulo, Ícone na barra de tarefas, Redimensionar, entre outras.

Em formulários VBA, não é possível, sem o auxilio de técnicas externas, aplicar esses efeitos aos userforms.

Vou mostrar nesse breve artigo como adicionar os botões Minimizar, Maximizar e Bloquear o botão Fechar em um formulário VBA sem utilização de activex.

Windows API

Com o auxilio de algumas API´s do Windows, podemos modificar de forma radical o comportamento de uma janela VBA. E é por meio de algumas delas que será possível aplicar os efeitos desejados.

São apenas 3 as funções a serem utilizada:

    GetWindowLong
    SetWindowLong
    GetAvtiveWindow

Mão na massa

    * Inicie o Excel (pode ser qualquer outro aplicativo do office que utilizar VBA)
    * Pressione Alt+F11 para acessar o editor do Visual Basic
    * Adicione um userform no projeto VBA        

  

    * Se a caixa de ferramentas não estiver visivel, exiba-a através do menu      Exibir > Caixa de Ferramenta

   

    * Adicione duas caixas de seleção e um botão de comando
    * Organize-os conforme mostrado na tela abaixo

 

Dica : Utilize a pagina de propriedades para alterar os rótulos do controles e do formulário

    * Pressione F7 para exibir a página de código
    * Limpe todo o código que estiver na janela
    * Copie e cole este código na janela de código

Código Necessário para o funcionamento

    Option Explicit

    ‘Funções API´s necessárias
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal Indice As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal Indice As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function GetActiveWindow Lib "user32" () As Long
    ‘Constantes necessárias
    Private Const GWL_STYLE = (-16)
    Private Const GWL_MIN = &H20000
    Private Const GWL_MAX = &H10000

    ‘Adiciona o Botão Maximizar  janela ativa
    Public Property Let Botão_Minimizar(Exibir As Boolean)
        If Exibir = True Then
            Call SetWindowLong(hWnd:=GetActiveWindow, Indice:=GWL_STYLE, dwNewLong:=GetWindowLong(GetActiveWindow, GWL_STYLE) Or GWL_MIN)
        Else
            Call SetWindowLong(hWnd:=GetActiveWindow, Indice:=GWL_STYLE, dwNewLong:=GetWindowLong(GetActiveWindow, GWL_STYLE) And Not GWL_MIN)
        End If
    End Property

    ‘Adiciona o Botão Maximizar  janela ativa
    Public Property Let Botão_Maximizar(Exibir As Boolean)
        If Exibir = True Then
            Call SetWindowLong(hWnd:=GetActiveWindow, Indice:=GWL_STYLE, dwNewLong:=GetWindowLong(GetActiveWindow, GWL_STYLE) Or GWL_MAX)
        Else
            Call SetWindowLong(hWnd:=GetActiveWindow, Indice:=GWL_STYLE, dwNewLong:=GetWindowLong(GetActiveWindow, GWL_STYLE) And Not GWL_MAX)
        End If
    End Property

    Private Sub CheckBox1_Click()
        Botão_Maximizar = CheckBox1.Value
    End Sub

    Private Sub CheckBox2_Click()
         Botão_Minimizar = CheckBox2
    End Sub

    Private Sub CommandButton1_Click()
        Unload Me
    End Sub

Agora basta executar o projeto através do menu Executar > Executar Sub/Userform ou pressione a tecla F5