Arquivo da tag: Formulários

Excel VBA – Usando o controle TreeView

Tradução do artigo publicado em: http://www.excelguru.ca/node/85
Autor: Ken Puls

Introdução

Neste tutorial criaremos um UserForm que conterá um controle TreeView no Excel VBA. O objetivo é preencher o controle TreeView com dados que refletirão os nomes das planilhas da pasta de trabalho aberta e as células dentro destas que contém alguma fórmula.

Como este artigo envolve programação VBA e controles UserForm, sugerimos alguma familiaridade com estas duas tecnologias por parte do leitor para um melhor entendimento, além de alguma experiência com o ambiente VBE (Visual Basic Editor).

Para deixar o exemplo simples, os nomes dos controles foram mantidos como padrão, porém, sinta-se a vontade para renomeá-los a seu modo, de forma que facilite o acompanhamento do exemplo. Lembre-se apenas de refletir os nomes dos controles alterados nos devidos blocos de código para proporcionar o correto funcionamento do exemplo.

Criando a estrutura para o exemplo:

Siga os seguintes passos para criar nosso exemplo:

  1. Crie uma nova pasta de trabalho
  2. Adicione algumas fórmulas nas planilhas 1 e 2, não importa qual, mas precisa ser uma fórmula
  3. Entre no VBA (Alt+F11)
  4. Adicione um UserForm ao projeto
  5. Adiciona um novo módulo e adicione o seguinte código para chamar o UserForm:
    Sub ufLaunch()
         'Abre o userform
         UserForm1.Show
    End Sub

Adicionando o controle TreeView à barra de ferramentas:

  1. Clique com o botão direita na barra de ferramentas do VBA e selecione a opção “Adicionar Controles…”, conforme mostra a figura abaixo:
  2. Role a barra até encontrar o item “Microsoft Treeview Control, version x.x” O mais provável é que a versão mostrada seja a 6.0, mas não deve fazer diferença. Selecione o item e clique em OK.
  3. O controle será adicionado a barra de ferramentas conforme mostrado abaixo:
  4. NOTA: O controle TreeView permanecerá na sua barra de ferramentas até que este seja removido

Criando e configurando o userform:

  1. Adicione os seguinte controles no userform:
    1. TreeView
    2. Label
    3. CommandButton

    O userform deverá ser contruído para que fique parecido com o seguinte:

Adicionando o código que faz o trabalho:

As rotinas abaixo devem ser adicionadas ao UserForm:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Private Sub UserForm_Initialize()
'Carrega os dados e configura o form
 
     'Congfigura os controles
     With Me
          .CommandButton1.Caption = "Close"
          .Label1 = vbNullString
          .TreeView1.LineStyle = tvwRootLines
     End With
 
     'Preenche o Treeview
     Call TreeView_Populate
End Sub
 
Private Sub TreeView_Populate()
'Preenche os dados do controle TreeView
 
     Dim ws As Worksheet
     Dim rngFormula As Range
     Dim rngFormulas As Range
 
     With Me.TreeView1.Nodes
          'Limpa os dados do controle
          .Clear
 
          For Each ws In ActiveWorkbook.Worksheets
               'Add worksheet nodes
               .Add Key:=ws.Name, Text:=ws.Name
 
               'Verifica de existe alguma fórmula na planilha
               On Error Resume Next
               Set rngFormulas = ws.Cells.SpecialCells(xlCellTypeFormulas)
               On Error GoTo 0
 
               'Adiciona as células que contém fórmulas
               If Not rngFormulas Is Nothing Then
                    For Each rngFormula In rngFormulas
                         .Add relative:=ws.Name, _
                              relationship:=tvwChild, _
                              Key:=ws.Name & "," & rngFormula.Address, _
                              Text:="Range " & rngFormula.Address
                    Next rngFormula
               End If
 
               'Zera o range para a próxima interação do laço
               Set rngFormulas = Nothing
          Next ws
     End With
End Sub
 
Private Sub Treeview1_NodeClick(ByVal Node As MSComctlLib.Node)
'Descreve o nó selecionado
 
     Me.Label1.Caption = Node.Key
End Sub
 
Private Sub CommandButton1_Click()
'Fecha o form
 
     Unload Me
End Sub

O resultado final:
Salve o projeto e retorne a interface do Excel. Pressione Alt+F8 para ativar a tela de macros e selecione a macro “ufLaunch” para execução. O userForm deverá ser mostrado. Como descrito anteriormente, foi solicitado que algumas fórmulas fossem adicionadas nas planilhas. A TreeView inicialmente lista as planilhas existentes e aquelas que possuem fórmulas possuem itens filhos que refletem quais células as possuem. A figura abaixo demonstra o resultado.

Explicando o código:

O userForm faz uso de quatro rotinas que são descritas abaixo:

Private Sub UserForm_Initialize()

Carrega as configurações necessárias para o funcionamento do userForm. É o local ideal para colocar todas as configurações necessárias dos controles, ou pelo menos aquelas que não podem ser feitas em modo de Desgin.Além disso, faz a chamada a rotina que preenche os dados da TreeView.

De especial, a propriedade LineStyle é setada para tvwRootLines. O padrão é tvwTreeLines, que não mostra os indicadores + e – para expansão dos itens, sendo possível apenas por duplo-clique. Por questões práticas, utilizar os sinalizadores + e – torna a tarefa de navegação mais fácil e intuitiva. Por isso a configuraremos assim.

Private Sub TreeView_Populate()

Preenche os dados da TreeView com os nomes das planilhas como nós principais e os nós filhos sendo o endereço das células que contém fórmulas.

O laço feito para varrer as planilhas e células com fórmulas é auto-explicativo e por isso não vamos entrar em detalhes deste ponto

Enquanto os nós são adicionados na TreeView, é preciso definir seus relacionamentos com os nós existentes, podendo ser pai ou filho. Neste caso, as planilhas serão os nós/pai das células que contém as fórmulas.

Para adicionar um nó no nível raiz, é preciso mencionar tanto a chave/nome do nó (Key) como o texto, dados solicitados como parâmetro no método Add. A chave precisa ser única para que o nó seja colocado no nível mais alto. O exemplo de código abaixo adiciona um novo nó com o nome de uma planilha:

.Add Key:=ws.Name, Text:=ws.Name

i.e. Me.TreeView1.Nodes.Add Key:=”Sheet1″, Text:=”Sheet1″

Toda vez em que for necessário adicionar um nó no nível mais alto, a sintaxe acima deve ser utilizada.

Para adicionar nós filho, o processo é um pouco diferente. O método utilizado ainda é o Add, bem como é preciso informar uma chave única para o nó adicionado. Porém é preciso informar o “grau” de parentesco do nó adicionado e quem é o nó relacionado. No caso de um nó filho, o parâmetro a ser informado deve ter o valor tvwChild). O código abaixo adiciona um nó filho ao TreeView:

.Add relative:=ws.Name, relationship:=tvwChild, _
Key:=ws.Name & "," & rngFormula.Address, Text:="Range " & rngFormula.Address

i.e. Me.TreeView1.Nodes.Add relative:= “Sheet1″, relationship:=tvwChild Key:=”Sheet1,$C$8″, Text:=”Rage $C$8”

Como dito, para “conectar” um nó filho ao nó pai, o parâmetro “relative” deve ser informado, e este deve ser o “key” do nó pai. De qualquer forma, o novo nó também precisa ter seu key e este deve ser único.

Private Sub Treeview1_NodeClick(ByVal Node As MSComctlLib.Node)

Este é o evento disparado quando um nó do TreeView é clicado. A rotina captura o nó que foi clicado e escreve sua identificação no label1. É interessante notar que quando um nó filho é clicado, ele leva também a identificação do nó pai, separado por vírgula. Apesar de parecer um detalhe, este formado auxiliaria o acesso a um determinado nó pelo seu valor usando esta string através da função Split(), que retornaria um array com os valores respectivos.

Private Sub CommandButton1_Click()
Simplesmente fecha o userForm.

Conclusão:

Uma vez seguido o tutorial, percebe-se que o funcionamento do controle TreeView é bastante intuitivo. O exemplo foi aplicado ao Excel, fazendo uso de seus objetos, mas poderia facilmente ser aplicado ao Access, Word ou qualquer aplicação que faça uso do VBA. Na verdade, o controle é disponibilizado no Windows, de forma que qualquer aplicativo que ofereça interface de programação, como Delphi o VB tradicional.

Adicionando imagens ao TreeView:

É comum ver o controle TreeView ser utlizado em várias operações do Microsoft Windows, a começar pelo próprio Windows Explorer. No caso deste último, pode-se ver que há imagens associadas a cada nó, como pode ser visto na figura abaixo:

Como na figura acima, é possível associar imagens aos nós do TreeView. Um exemplo de como adicionar imagens ao TreeView pode ser visto neste link.

Usando a TreeView para navegar pelos Ranges:

A rotina abaixo adiciona a funcionalidade de navegação ao userForm TreeView. Adicione um botão ao userForm e adicione o código abaixo. Isso fará com que a aplicação navegue até o nó selecionado e feche o form. Se for uma planilha, nevegará até a mesma, se for uma célula, o mesmo será feito:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Private Sub CommandButton2_Click()
'Purpose: Go to the selected node
 
     Dim sNodes() As String
 
     'Verifica se existe algum nó selecionado
     If Me.Label1.Caption = vbNullString Then
          MsgBox "You have not selected anything!" & vbNewLine & _
                 "Please select something and try again.", vbCritical + vbOKOnly, _
                 "Nothing selected"
          Exit Sub
     End If
 
     'faz o split do conteúdo do Label
     sNodes = Split(Me.Label1, ",")
 
     With Worksheets(sNodes(0))
          'Ativa a planilha
          .Activate
 
          'Ativa o range
          If UBound(sNodes) + 1 > 1 Then
               'Ativa o range selecionado
               .Range(sNodes(1)).Activate
          Else
               'Quando da seleção de uma planilha, ativa a célula A1
               .Range("A1").Activate
          End If
     End With
 
     'Fecha o userform
     Unload Me
 
End Sub

Excel – Planilhas interativas

Da PC World Espanha

Introdução

Eu, você e a maioria das pessoas nos acostumamos a digitar valores em células e tabelas para inserir dados em planilhas do Excel. Mas o software da Microsoft oferece mais do que isso. Ele possibilita a inserção de diversos controles interativos. O uso desses recursos torna o trabalho com planilhas mais rápido, profissional e elegante.

Exemplos desses comandos são as barras de rolagem, capazes de alterar o valor de uma determinada célula, e as caixas de combinação, que obrigam o preenchimento de uma célula com uma das opções de uma lista fixa. Além de simplificar a entrada de dados, o uso desses controles evita erros de digitação e permite a associação entre diferentes categorias de valores.

Como modelo, criaremos uma planilha para o cálculo do preço de estadias em hoteis, cujo valor total varia conforme o número de diárias, o estabelecimento escolhido e o tipo de quarto. Para simplificar, criaremos primeiro uma opção com apenas quartos simples e, posteriormente, acrescentaremos opções para apartamentos duplos e triplos.

Barras de rolagem

O valor da célula B3 na imagem abaixo, que representa a duração da estadia, pode variar conforme deslizamos uma barra de rolagem, como as usadas para percorrer um documento muito longo. As barras de rolagem, como todos os controles ou caixas de diálogo, são obtidas a partir da barra de ferramentas Formulários. Se esta barra não estiver visível, clique em Exibir/Barras de Ferramentas/Formulários.

Planilhas interativas

Uma vez que a barra adequada esteja visível, clique no botão Barra de Rolagem. O cursor do mouse se transformará em uma pequena cruz. Arrastando o mouse, desenhe um retângulo de aproximadamente uma linha de altura por três colunas de largura. Ao soltar o botão, a barra será inserida na planilha.

Planilhas interativas

Agora, para vincular o valor da célula B3 à posição da barra de rolagem, clique com o botão direito sobre a caixa e escolha a opção Formatar Controle. Na caixa de diálogo que aparecerá, digite B3 no campo Vínculo da Célula. Isto significa que a célula associada ao movimento da barra será a B3. A caixa de diálogo mostra também diferentes opções de valores (Valor Mínimo, Valor Máximo, Alteração Incremental etc.), que correspondem aos valores extremos da célula vinculada e da variação do valor dessa célula à medida que o cursor da barra é deslizado. Podemos deixar os valores sugeridos pelo Excel para este exemplo. Depois de clicar em OK, teste o funcionamento da barra, deslizando o cursor ao longo dela e verificando se o número de diárias é alterado simultaneamente.

Caixas de listagem

A escolha do hotel será feita por uma caixa de listagem, aqueles menus que usamos, por exemplo, para escolher o tipo de fonte de em documento no processador de texto. Estas listas são conseguidas com o botão Caixa de Combinação na barra de ferramentas Formulários.

Planilhas interativas

Planilhas interativas

Proceda, inicialmente, da mesma maneira. Clique no botão Caixa de Combinação e desenhe, arrastando o mouse, um retângulo de aproximadamente uma linha de altura e uma coluna e meia de largura. As caixas de listagem têm dois endereços associados a elas: um Intervalo de Entrada e uma Célula Vinculada. O intervalo de entrada é a localização das células onde se encontram as opções que aparecerão na lista. No nosso caso, os nomes dos hotéis disponíveis. Já a célula vinculada não é a B4, onde deve aparecer o preço da noite para o hotel. A célula vinculada é uma célula auxiliar, por exemplo, A16.

A célula vinculada exibirá um número correspondente à posição do hotel escolhido na lista: se selecionarmos o primeiro, na célula vinculada aparecerá 1. Se selecionarmos o segundo hotel, aparecerá 2, e assim sucessivamente. No próximo passo, usaremos uma função adequada para obter, em B4, o preço correspondente ao hotel escolhido. Para designar o intervalo de entrada e a célula vinculada, clique com o botão direito do mouse sobre a caixa de listagem, escolha Formatar Controle e preencha os dois campos.

Planilhas interativas

A função Índice

Para obter, na célula B4, o preço correspondente ao hotel escolhido, é necessário utilizar a função Índice. Na célula B4, escreva a seguinte fórmula: “=INDICE(B11:B14;A16)”, sem as aspas, onde B11:B14 indica a localização dos preços dos hotéis e A16 é a célula vinculada à caixa de listagem, cujo valor determinará qual item da lista será transportado para a célula B4.

Planilhas interativas

Com esta função, já podemos testar o funcionamento da planilha, ajustando a quantidade de dias pela barra de rolagem e escolhendo o hotel pela caixa de listagem. O preço total da estadia aparecerá na célula B5, que terá uma fórmula simples de multiplicação: “=B3*B4”, sem as aspas.

Botões de Opção

Consideremos agora uma variação mais complexa dessa planilha. O preço da diária deve variar não apenas de acordo com o hotel escolhido, mas também com as opções de quarto simples, duplo ou triplo, tal como indica a tabela A11:D14 na imagem abaixo. Realizaremos a escolha do tipo de quarto por meio de Botões de Opção, outro dos controles interativos disponíveis na barra de ferramentas Formulários. Insira um da mesma forma como fez com os controles anteriores. Em seguida, crie outros dois com as opções Copiar e Colar.

Planilhas interativas

Os três botões de opção da planilha formam um grupo. Quando selecionamos um deles, a seleção dos outros dois é cancelada. Por isso são usados para a escolha entre opções excludentes. O grupo tem uma única célula vinculada comum aos três. O valor desta célula é o número da ordem do botão selecionado. Na nossa planilha, estabeleceremos A17 como célula vinculada, clicando com o botão direito do mouse, escolhendo Formatar Controle e preenchendo o campo Vínculo da Célula.

O número de cada botão corresponde à ordem em que foram criados. Se mudarmos a ordem, movendo os botões pela planilha, cada um conservará seu número original. Também podemos trocar o texto do botão por outro mais adequado. Para isso, clique com o botão direito do mouse sobre o botão e escolha Editar Texto.

Função Índice com duas variáveis

Agora, para fazer o valor da célula B4 variar também conforme o botão de opção, será necessário modificar a fórmula da função Índice, acrescentando um segundo critério. A sintaxe deve ser a seguinte: “=INDICE(B11:D14;A16;A17)”, sem as aspas. Neste caso, o primeiro argumento (B11:D14) é a tabela com a matriz de preços, o segundo (A16) indica a linha desta tabela e o terceiro (A17) aponta a coluna.

Planilhas interativas

Pronto! A planilha está concluída. Podemos indicar a duração da estadia pela barra de rolagem, escolher o hotel pela caixa de combinação e selecionar o tipo de quarto pelos botões de opção. Estes mesmos objetos podem ser utilizados para padronizar e automatizar o trabalho com qualquer planilha que envolva células cujos valores variam com freqüência, como a duração da estadia, ou sejam provenientes de uma lista, como preços dos quartos.

Criando um formulário no Word

Por Patricia Daltro

Imagine que trabalhamos em uma loja e precisamos emitir para os fornecedores, semanalmente, um relatório de compra de produtos.

O padrão seria sentarmos e digitarmos no Word esse relatório. Especificando os produtos e a quantidade desejada.

Esse tipo de tarefa fica muito mais rápido e profissional quando automatizada. Isso é, criamos um sistema que já traga os produtos digitados, dando-nos a opção apenas de selecioná-los e liste os fornecedores, de maneira que bastariamos clicar sobre o nome do fornecedor desejado, marcar os produtos e solicitar a impressão.

Fazer isso não é nem um pouco complicado. Resolvemos essa equação usando a Ferramenta Formulário do Word.

Normalmente, quando pensamos em formulário, pensamos em programas como Access, um software da Microsoft – pertencente ao grupo do Microsoft Office, que nos permite criar, atualizar e modificar banco de dados, além de outras coisas.

Mas, se o nosso objetivo é somente a criação de um formulário simples, feito o exemplo acima, podemos deixar o Access de lado e construí-lo todo no Word.

Para a criação de um Formulário o primeiro passo é exibirmos a Ferramenta Formulário – clique em Exibir (na Barra de Menu) – opção Barra de Ferramentas – Formulário.

Entendendo a Barra de Ferramentas Formulário:

Um formulário é composto de diversos campos, cada um deles tem uma função específica, para facilitar a vida de quem digita e se tornar claro para quem o preenche.

Quando exibimos a Barra de Ferramentas Formulário, somos apresentados a esse campos de formulário, (que no caso do Word se restringe a três).

Caixa de texto – Neste campo o usuário poderá digitar valores tais como: nome, endereço, e-mail, etc. Mas pode também ser configurado para aceitar valores numericos tais como: telefone, cep etc.

Caixa de verificação – Neste campo o usuário marca as opções desejadas. Podemos configurar tamanho e se a caixa aparecerá previamente marcada.

Lista Suspensa – Neste campo as opções são listadas como um menu suspenso, aonde o usuário clica sobre a opção desejada para selecionar.

Após escolhermos os tipos de campos a serem aplicados em nosso formulário, podemos usar o botão Opção de Formatação para formatarmos os campos, definindo especificações para cada um deles.

Os próximos botão na Barra de Ferramentas Formulário é o Desenhar Tabela e o Inserir Tabela. Parece estranho esses botões na construção de um formulário, mas o uso de tabelas na elaboração de um documento/formulário é o mais indicado, pois ajuda a alinhar e organizar nossos campos.

O botão inserir Quadro, serve para criarmos uma caixa de texto.

O penúltimo botão permite a visualização das marcas dos campos do formulário.

E o último botão, tem a finalidade definida no próprio nome: Proteger Formulário.
Essa proteção não é garantia da não alteração do que foi feito, pois o que esse botão faz é criar um bloqueio nos ítens do formulário, mas basta clicar novamente sobre ele que é desbloqueado.
Uma proteção mais efetiva será vista no final desse artigo.

Agora que já entendemos os componentes do formulário, vamos passar para a etapa da construção.

1) Clique em Exibir – (na Barra de Menu) – opção Barra de Ferramentas – e selecione Formulários;

2) Vamos iniciar nosso formulário desenhando a tabela – faça uma tabela de duas (02) colunas e três (03) linhas;

3) Na primeira célula digite Responsável:;

4) Na segunda célula da primeira linha – insira um campo de formulário tipo caixa de texto;

5) Vamos definir as propriedades do Caixa de Texto – podemos fazer isso de duas maneiras: clicando 2X sobre a caixa de texto ou selecionando-a e clicando no Botão Opção de Formatação, na Barra de Ferramentas Formulário;

6) Na janela de formatação que se abre devemos definir na caixa tipo, se o valores a serem digitados são númericos, de texto ou de cálculos;

7) Na opção maximum lenght – definimos o número máximo de caracteres que este campo pode aceitar;

8 ) Por último definimos o formato dos caracteres – só é válido se formos usar números. Encerre clicando em OK.

9) Na Primeira célula – segunda linha digite Fornecedores;

10) Na segunda célula – segunda linha insira um campo de Lista Suspensa;

11) Para formatar esse campo repita o procedimento nº 5;

12) Para adicionar os nomes dos fornecedores, clicamos na primeira caixa de texto e digitamos o nome;

13) Clique em adicionar, repita o procedimento até o último fornecedor (use o exemplo abaixo:


14) Encerre clicando em OK.

15) Na última linha da tabela, na primeira célula, digite; Produtos;

16) Na segunda célula, insira 5 campos do tipo Caixa de Verificação;

17) Digite ao lado de cada uma o nome do produto (conforme o exemplo abaixo):

18) Finalize o formulário clicando no Botão Proteger Formulário.

Protegendo o Formulário

Com esses procedimentos o seu formulário estaria pronto, mas para que o trabalho fique completo, vamos protegê-lo realmente de possíveis modificações. Para isso, clique em:

a) Ferramentas – na Barra de Menu – opção Proteger Documentos;

b) Marque a opção Formulários na Janela que aparecerá;

c) Digite uma senha e clique em OK;

d) Confirme a senha digitada e pronto o seu formulário estará protegido.

Salvando o Formulário como Modelo

A última etapa do trabalho é salvar o formulário como um modelo, de maneira que ele esteja pronto para o uso todas as vezes que se quiser utilizá-lo.

1) Clique em Arquivo – na Barra de Menu – Salvar Como;
2) Dê um nome para o seu trabalho;
3) Clique na caixa Tipo de Arquivo e selecione modelo.dot;
4) Clique em Salvar.

Com isso, você terá sempre o formulário pronto para o uso, bastando clicar em Arquivo – Novo – e selecionando o formulário criado.

Tomás Vásquez
www.tomasvasquez.com.br

Construindo formulários Web sem programar

Em muitas situações no dia a dia ou na empresa é necessário coletar dados de clientes, funcionários, visitantes, enfim.

Atualmente a internet é um meio fácil de acesso para qualquer pessoa, principalmente em empresas. Não só nelas como para qualquer pessoa. A proliferação de Cyber-Cafés e Lan-Houses proporcionam a inclusão digital.

Bom, o foco é, quando você precisa publicar um questionário em qualquer situação, na empresa, no seu site, quem é que já não pensou em fazer isso on-line? Aposto que pelo menos 90% dos que lerem este post. O problema é que conhecimentos básicos de HTML ou de sites não são suficientes para promover tal façanha, Para isso é necessário conhecer alguma linguagem de programação Web como ASP, ASP.NET, PHP, JSP, entre outras, além dos percalços da hospedagem, servidor, enfim.

O lado bom é que existe um site de nome “formfacil”. Ele possibilita a criação de formulários Web para coletar dados. A partir de um cadastro, é possível criar campos de todo o tipo como texto simples, lista de valores, escolha múltipla, única, enfim, as opções mais tradicionais. É claro, depois de criado, é possível publicá-lo e as respostas submetidas a um email informado no cadastro.

É bem prático e fácil de usar. Atualmente está em verão alfa (ou seja, ainda falta a beta, homologação e só depois a versão final), portando contém alguns bugs. Porém o cadastro é gratuito. O link é:

http://www.formfacil.com

Vale a pena testar!

Bom proveito!

Tomás Vásquez