Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Resumo da matéria
Índice
Resumo da matéria
Mod. Introdução ao desenvolvimento de aplicações no Excel
1
Uma folha de cálculo aplicacional é desenhada para que alguém, sem recurso a um
treino intensivo, consiga realizar o seu trabalho.
No entanto é de referir que as outras aplicações existem porque são dedicadas para um
determinado objetivo, para o qual o Excel não é.
Sendo a opção do uso do mesmo para um determinado fim ter de ser bem ponderado.
Resumo da matéria
Mod. Introdução ao desenvolvimento de aplicações no Excel
1 Determinar as necessidades dos utilizadores
Passos a recordar
Resumo da matéria
1
Preocupações para com o utilizador
• Testar a aplicação
• Tornar a aplicação “Bulletproof”
• Tornar a aplicação apelativa e intuitiva
• Documentar os esforço de desenvolvimento
• Atualizar a aplicação quando necessário
Resumo da matéria
Explorador
do Projeto
Propriedades
dos Objetos
Resumo da matéria
2 Editor
A inserção e remoção de módulos, é efetuada via o menu de contexto acedido quando
clicamos com o botão direito do rato em cima de um livro ou folha.
Para adicionar
Formulários ou Para Remover
Módulos Formulários ou
Módulos
Resumo da matéria
2 Editor, Opções
Opções
Verifica
automaticamente a
sintaxe editada.
Obriga a declaração
das variáveis.
Mostra os valores
para as variáveis
Lista que estamos a usar.
automaticamente os Muito útil para
membros do objeto realizar depuração.
Mostra os argumentos
disponíveis para os objetos
que estamos a trabalhar.
Resumo da matéria
2 Editor, Código
Indentar
Ação que tem por objetivo de indicar como estão os elementos
hierarquicamente dispostos dentro do código.
Remover Indentação
Comentar
Ação que tem por objetivo de indicar ao compilador que deve
ignorar determinada porção de código . Podemos comentar uma
simples linha adicionado ao seu inicio o símbolo ‘ , ou usamos o
botão indicado para comentar blocos de código.
Remover Comentários
Resumo da matéria
2 Editor, Operações
Correr código
Suspender código
Parar código
Resumo da matéria
2 Editor, Debug
Breakpoint
Cursor
Passo a passo
Correr até ao cursor
Adiciona um Watch
Ativar/Desativar Breakpoints
Resumo da matéria
Compilador parado
Compilador a correr
Resumo da matéria
2 VBAProject, Properties
Nome do projeto.
Descrição do projeto.
Argumentos a passar
ao projeto quando é
compilado.
Resumo da matéria
Resumo da matéria
3 Componentes do VBA
Código Podemos desempenhar ações por executar código, escrito ou
gravado em módulos.
Módulos Os módulos de VBA são gravados nos Livros, e são visualizados e
editados pelo editor de VBA o VBE. Os módulos são constituídos
por procedimentos.
Procedimentos Um procedimento é basicamente um bocado de código que
desempenha uma acão. Existem dois tipos de procedimentos:
Sub: Conjunto de código que pode ser usado das mais variadas
maneiras.
Sub Exemplo()
Texto = “Informação.”
MsgBox “Isto é uma ” & Texto
End Sub
Funções: Ao contrario dos Sub Procedimentos a função pode devolver um
valor.
Function Duplica(Arg1)
Duplica = Arg1 * 2
End Function
Objetos Manipula os objetos contidos na aplicação. Os objetos tem
propriedades que podem ser configuradas.
Coleções Uma coleção consiste num grupo de objetos dentro de outro. Tal
como as folhas dentro de um livro de Excel.
Hierarquia de Objetos
Quando nos referimos a hierarquia dos objetos definimo-la com o
ponto final “.” .
Application.Workbook(“Exemplo.xlsx”)
Application.Workbook(“Exemplo.xlsx”).Worksheets(“Folha1”)
Application.Workbook(“Exemplo.xlsx”).Worksheets(“Folha1”).Range(“B2”)
Resumo da matéria
Resumo da matéria
3 Propriedades e Métodos
Todos os objetos tem propriedades, tal como foi dito anteriormente uns são apenas de
leitura, e outras propriedades devolvem e recebem valores, se assim o desejarmos.
Exemplo de uma propriedade de leitura e uma de escrita:
Resumo da matéria
Range(“C2”).Select Range(“A1”).Select
Activecell.value=30 Activecell.Offset(2,1).Value=30
Existe ainda mais uma maneira de referenciar células, que é usando a função cell.
Range(“A1”).Select
Activecell.offset(0,0).Value=30
Neste caso ia colocar o valor 30 na célula ativa, porque a posição (0,0) é a própria célula.
No caso de ser (0,1) seria a célula a direita.
Resumo da matéria
Comentários
Os comentários servem para descrever o propósito de uma porção de código, alteração
ou documentação do mesmo.
Sub Comentarios()
' Este procedimento poem o variável x a 0.
a=0
' Mostra o resultado
MsgBox a
End Sub
Byte 1 0 a 255
Boolean 2 Verdadeiro ou Falso
Integer 2 –32,768 a 32,767
Long 4 –2,147,483,648 to 2,147,483,647
Variant* (com números) 16 Qualquer valor numérico até limite do tipo Double.
Pode ainda conter valores especiais como o Vazio (Empty), Error (Erro), Nothing (Nada),
e Null (Nulo).
Variant* (com letras) 22 + tamanho da String 0 a 2 biliões
User-defined Varia Dependente dos elementos
Resumo da matéria
Exemplos:
Dim a As Integer Dim Primeiro As Long Dim Numero As Single
Dim DatadeHoje As Date Dim Nome As String Dim Valor
Resumo da matéria
^ Exponenciação 1
* / Multiplicação e Divisão 2
+ − Adição e Subtração 3
& Concatenação 4
And Conjunção
Or Disjunção
Xor Ou Exclusivo
Eqv Equivalência
Resumo da matéria
Uma Matriz é um grupo de elementos do mesmo tipo que tem um nome comum, e são
acedidos e controlados por um cursor.
Arrays Monodimensionais
Dim Numeros(1 To 100) As Integer
…
Numeros(2) = 10
Arrays Multidimensionais
Dim Numeros(1 To 100, 1 to 10) As Integer
…
Numeros(2,1) = 10
Redimencionar um Array
X=200
Redim Numeros (1 to x)
Resumo da matéria
Resumo da matéria
With [objecto]
…
End With
Serve para indicar que as seguintes operações indicadas após o ponto são referentes ao
objeto indicado a seguir ao With. O dois exemplos de código realizam a mesma
operação.
… With Selection.Font
Selection.Font.Name = “Arial” .Name = “Arial”
Selection.Font.Bold = True .Bold = True
Selection.Font.Size = 12 .Size = 12
… End With
For Each
…
Next
Tem como objetivo percorrer um objeto que seja composto como um Array.
For Each Item In ActiveWorkbook.Worksheets
MsgBox Item.Name
Next Item
Resumo da matéria
Sub ExemploGoto()
UserName = InputBox(“Insira o seu nome:")
If UserName <> “Pedro" Then GoTo NomeErrado
MsgBox (“Ola Pedro ...")
Exit Sub
NomeErrado:
MsgBox “Só o Pedro pode visualizar isto."
End Sub
…
If Numero < 1 Then
MsgBox “Menor que 1"
Else
MsgBox “Maior ou igual a 1"
End If
…
Resumo da matéria
For - Next
O For-Next serve para realizar iterações, percorre o código existente entre o For e o
Next, tantas vezes quantas as definidas no intervalo. No exemplo a seguir, a variável
Valor, iria assumir o valor de 1 a 100, e correr o código 100 vezes.
…
Soma = 0
For Valor = 1 To 100
Soma = Soma + Valor
Next Valor
MsgBox Soma
…
Resumo da matéria
É igual ao For .. Next, que nestes casos o código é corrido enquanto a condição lógica
for verdadeira.
Para melhor se entender, o melhor é traduzir a letra e interpretar o que está digitado.
Resumo da matéria
Um procedimento é uma conjunto de código em VBA que reside num modulo de VBA.
Procedimento Sub
[Public | Private] [Static] Sub nome ( [argumentos] )
[...]
[Exit Sub]
[...]
End Sub
Resumo da matéria
Mod. Entender o VBA
3 Itens comuns no código de VBA
Funções
Function
[Public | Private] [Static] Function nome ( [argumentos] ) [As tipo]
[...]
[Exit Function]
[...]
End Function
As funções quando definidas num módulo, ficam disponíveis nas folhas existentes no
livro de Excel, com se de uma função interna se trata-se, podendo ser usada diretamente
nas células de uma folha como o sum().
Resumo da matéria
É de notar que o nome da função passa a ser a variável que vai retornar o valor
processado. No caso exemplo acima a variável Comissao para a função Comissao.
Resumo da matéria
Tal com o Excel o VBA também tem formulas abaixo uma lista das mais usadas:
Year (data)
Month(data)
Day (data)
Now
DateSerial (ano, mês, dia)
Hour (hora)
TimeSerial (hora, minuto, segundo)
Minute (hora)
Weekday (data)
Second (hora)
Resumo da matéria
Identificação
[Application.]Workbooks(“Livro1”)
[Application.]Workbooks(1)
[Application.]ActiveWorkbook
[Application.]ThisWorkbook
Workbooks Collection
[Application.]Workbooks.Add
[Application.]Workbooks.Open(FileName)
[Application.]Workbooks.Close
[Application.]Workbooks.Count
Propriedades
workbook.Name
workbook.Path
workbook.FullName
workbook.Saved
Métodos
workbook.Activate
workbook.Save
workbook.Close(SaveChanges, FileName)
workbook.SaveAs(FileName)
workbook.Protect(Password, Structure, Windows)
workbook.Unprotect(Password)
Eventos
Resumo da matéria
Identificação
Métodos
Propriedades
worksheet.Name
worksheet.Visible
Resumo da matéria
[ActiveSheet.]Range(“B2:C3”)
[ActiveSheet.]Range(“A1, B2:C3”)
[ActiveSheet.]Range(“Lucro”)
[ActiveSheet.]Range(“B2”, “C3”)
[ActiveSheet.]Cells(1, 2)
[ActiveSheet.]Range(“B2:C3”).Cells(1, 2)
Propriedades
range.Row
range.Column
range.Rows(Index)
range.Columns(Index)
range.Offset(RowOffset, ColumnOffset)
range.Value
range.Formula
range.FormulaLocal
range.FormulaR1C1
range.FormulaR1C1Local
range.Address(RowAbsolute, ColumnAbsolute)
range.Count
Métodos
range.Select
range.Calculate
range.Copy(Destination)
range.Cut(Destination)
range.Clear
range.ClearComments
range.ClearContents
range.ClearFormats
range.FillDown
range.FillUp
range.FillLeft
range.FillRight
Resumo da matéria
Exemplo 2
…
Range("A1").Copy Range("B1")
…
Ou
…
Range("A1:B10").Copy Range("D1")
…
Exemplo 3
…
Workbooks(“arquivo1.xlsx").Sheets("Sheet1").Range("A1").Copy _
Workbooks(“arquivo2.xlsx").Sheets("Sheet1").Range("A1")
…
Exemplo 4
Range("A1").CurrentRegion.Copy Sheets(“Folha2").Range("A1")
Caso em que se copia toda a informação continua, não se sabendo o intervalo a copiar,
a partir de uma célula.
Neste caso a célula “A1”
Resumo da matéria
Exemplo
…
Range("A1:C6").Cut Range("H1")
…
Exemplo
…
Dim Valor As Variant
Valor = InputBox(“Introduza um valor")
If Valor <> "" Then Range("A1").Value =Valor
…
Exemplo
…
Dim LinhaSeguinte As Long
Dim Nome As String, Valor As String
Do
LinhaSeguinte = cells(Rows.Count, 1).End(xlUp).Row + 1
Nome = InputBox(“Introduza o nome")
If Nome = "" Then Exit Sub
Valor = InputBox(“Introduza o valor”)
If Valor = "" Then Exit Sub
cells(LinhaSeguinte, 1) = Nome
cells(LinhaSeguinte, 2) = Valor
Loop
…
Resumo da matéria
Exemplo 2
…
Celulas = Range(“Conjuntocelulas").Count
…
Exemplo
Dim UltimaLinha As Long
Dim r As Long
Dim Contador As Long
Application.ScreenUpdating = False
UltimaLinha = ActiveSheet.UsedRange.Rows.Count + _ ActiveSheet.UsedRange.Rows(1).Row -
1
For r = UltimaLinha To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(r)) = 0 Then
Rows(r).Delete
Contador = Contador + 1
End If
Next r
Application.ScreenUpdating = True
MsgBox Contador & " linhas vazias eliminadas."
Resumo da matéria
Exemplo
Dim celula As Range
Set celula = Range(“A1")
Do While Not IsEmpty(celula)
If celula > 1 Then
Range(celula.Offset(1, 0), celula.Offset(celula.Value - 1, 0)).EntireRow.Insert
Range(celula, celula.Offset(celula.Value - 1, 1)).EntireRow.FillDown
End If
Set celula = celula.Offset(celula.Value, 0)
Loop
Exemplo
Function Conteudo(Rng)
Dim celula As Range
Set celula = Range(Rng)
Select Case True
Case IsEmpty(celula)
Conteudo = “Vazia"
Case Application.IsText(celula)
Conteudo = "Texto"
Case Application.IsLogical(celula)
Conteudo = "Lógico"
Case Application.IsErr(celula)
Conteudo = "Erro"
Case IsDate(celula)
Conteudo = "Data"
Case InStr(1, celula.Text, ":") <> 0
Conteudo = “Hora"
Case IsNumeric(celula)
Conteudo = "Numero"
End Select
End Function
Resumo da matéria
Exemplo
…
Range("A1:A100").Value = Application.WorksheetFunction.Transpose(Array)
…
Exemplo
…
Dim Livro As Workbook
For Each Livro In Workbooks
If Livro.Path <> "" Then Livro.Save
Next Livro
…
Exemplo
…
Dim Livro As Workbook
For Each Livro In Workbooks
If Livro.Name <> ThisWorkbook.Name Then
Livro.Close savechanges:=True
End If
Next Livro
ThisWorkbook.Close savechanges:=True
…
Resumo da matéria
Mod. Entender o VBA
3 Itens comuns no código de VBA
Usar as funções Internas do Excel
Exemplo
…
Dim NumerodeCelulas as Integer
Intervalo = Range("B1:B10")
NumerodeCelulas = Application.WorksheetFunction.Sum(Intervalo)
Cells(1, 1).Value = NumerodeCelulas
…
Resumo da matéria
Mod. Técnicas Avançadas de Programação
4
Ordenar Dados
Com o método Sort do objeto Range conseguimos criar ordenações configuráveis com mais que
um campo.
Uma chave
…
Dim LastRow As Integer
LastRow = Sheets("Caixa Registadora").UsedRange.Row - 1 + _
Sheets("Caixa Registadora").UsedRange.Rows.Count
Sheets("Caixa Registadora").Range("A1:I" & LastRow).Sort _
Key1:="Category", _
Order1:=xlDescending, _
Header:=xlYes
…
Duas chaves
…
Sheets("Caixa Registadora").Range("A1:I" & LastRow).Sort _
Key1:="Category", _
Order1:=xlDescending, _
Key2:="Withdrawal", _
Order2:=xlAscending, _
Header:=xlYes
…
Resumo da matéria
Mod. Técnicas Avançadas de Programação
4
Filtr
Filtrar Dados
Com o método Autofilter do objeto Range conseguimos criar filtros configuráveis com
mais que um campo.
Filtrar todos os registos do campo dois iguais a “ATM”
…
With Sheets("Caixa Registadora")
.Range("A1:I1").AutoFilter
.Range("A1:I1").AutoFilter Field:=2, Criteria1:=“ATM”
End With
…
Filtrar todos os registos do campo dois iguais a “ATM” ou “Credit Card” do 1º Trimestre
…
.Range("A1:I1").AutoFilter Field:=2, Criteria1:="Credit Card", Operator:=xlOr, Criteria2:="ATM“
.Range("A1:I1").AutoFilter Field:=3, Criteria1:=“1
…
Resumo da matéria
Mod. Técnicas Avançadas de Programação
4 Tabelas Dinâmicas
As tabelas dinâmicas são a pérola do Excel, pois é uma ferramenta que em poucos
passos podemos cruzar grandes quantidades de informação rapidamente.
Resumo da matéria
Mod. Técnicas Avançadas de Programação
4 Tabelas Dinâmicas
Exemplo da construção da Tabela Dinâmica
Dim PTCache As PivotCache
Dim PT As PivotTable
Sheets("Caixa Registadora").Select
Set PTCache = ActiveWorkbook.PivotCaches.Create( _ ‘ Cria a cache da Tabela
Dinâmica
SourceType:=xlDatabase, _
SourceData:=Range("A1").CurrentRegion) ‘Adiciona uma nova
folha ao livro Worksheets.Add
ActiveWorkbook.Sheets.Add
ActiveSheet.Name = "Tabela Dinamica"
Set PT = ActiveSheet.PivotTables.Add( _ ' Criar a Tabela
Dinâmica
PivotCache:=PTCache, _
TableDestination:=Range("A3"))
With PT ' Adiciona os Campos
‘.PivotFields(“").Orientation = xlPageField ‘Filtro
.PivotFields(“Qtr”).Orientation = xlColumnField ‘Colunas
.PivotFields("Category ").Orientation = xlRowField ‘Linhas
.PivotFields(“Withdrawal").Orientation = xlDataField ‘Valores
.DisplayFieldCaptions = False ‘Sem nome dos campos
End With
Adicionar um Campo
.Orientation = xlPageField Campo dos Filtros
.Orientation = xlColumnField Campo das Colunas
.Orientation = xlRowField Campo das Linhas
.Orientation = xlDataField Campo dos Totalizadores
Resumo da matéria
Mod. Técnicas Avançadas de Programação
4 Tabelas Dinâmicas
Remover um Campo
.Orientation = xlHidden
Tipo de Totalizador
.Function = xlCount Contagem
.Function = xlAverage Media
.Function = xlMax Máximos
.Function = xlMin Mínimos
.Function = xlProduct Produto
.Function = xlCountNums Contar Números
.Function = xlStDev Desvio Padrão
.Function = xlVar Variação
Ordenar
.AutoSort xlDescending, [Nome do Campo]
Filtrar
. PivotFilters.Add Type:=xlCaptionEquals, Value1:=[Filtro]
Aplicar um Estilo
.TableStyle2 = "PivotStyleMedium2"
Resumo da matéria
Mod. Técnicas Avançadas de Programação
4 Gráficos
Adicionar Um Gráfico
Dim MyChart As Chart
Set Grafico = ActiveSheet.Shapes.AddChart.Chart
Grafico.SetSourceData Source:=Range(Células para Alimentar o Gráfico)
Grafico.ChartType = xl3DColumnClustered
Grafico.SetElement (msoElementChartTitleAboveChart)
Grafico.ChartTitle.Text = "Titulo do Gráfico"
Grafico.SetElement (msoElementPrimaryCategoryAxisShow)
Grafico.Axes(xlCategory).Select
Grafico.SeriesCollection(1).XValues = Range(Células para alimentar o Nomes das Series)
Alterar um Gráfico
ActiveSheet.ChartObjects(1).Activate
If Not ActiveChart.HasTitle Then
ActiveChart.SetElement (msoElementChartTitleAboveChart)
ActiveChart.ChartTitle.Text = "Default"
Else
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = "Teste"
End If
Resumo da matéria
Mod. Técnicas Avançadas de Programação
4 Chamar aplicativos externos
Sem parâmetros
Dim Program As String
Dim TaskID As Double
On Error Resume Next
Program = “notepad.exe“
TaskID = Shell(Program, 1)
If Err <> 0 Then
MsgBox “Não é possivel iniciar" & Program, vbCritical, "Erro"
End If
Com parâmetros
Dim Program As String
Dim TaskID As Double
On Error Resume Next
Program = “notepad.exe c:\autoexec.bat“
TaskID = Shell(Program, 1)
If Err <> 0 Then
MsgBox “Não é possivel iniciar" & Program, vbCritical, "Erro"
End If
Resumo da matéria
Mod. Técnicas Avançadas de Programação
4 Importar e Exportar Ficheiros
Gravar ficheiros
Open [Ficheiro] For Output As #1
For linha = 1 To 10
txt = Sheets(1).Range("A" & linha).Value
Write #1, txt
Next
Close #1
Sub LigacaoAccess()
Dim cn As Object, rs As Object, myCalls As String
Dim MySql As String, dbfullname As String, myCnt As Long
dbfullname = “D:\Jogadores.accdb"
MySql = "SELECT * FROM jogadores;"
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & dbfullname & ";"
Set rs = CreateObject("ADODB.Recordset")
With rs
Set .ActiveConnection = cn
.Source = MySql
.Open , , 3, 3
NumerodeRegistos = .RecordCount
If NumerodeRegistos > 0 Then
.MoveLast: .MoveFirst
Sheets(1).Range("A1").CopyFromRecordset rs
End If
.Close
End With
cn.Close
Set rs = Nothing: Set cn = Nothing
End Sub
Resumo da matéria
Mod. Formulários para Utilizadores
5
InputBox
Código Tipo
0 Formula
1 Numero
2 String (texto)
4 Lógico (Verdadeiro ou Falso)
8 Uma referencia de celulas
16 Um valor erro
64 Um “Array” de valores
Resumo da matéria
Mod. Formulários para Utilizadores
5 MsgBox
vbYesNo 4 Yes e No
vbCancel 2 Cancel
vbAbort 3 Abort
vbRetry 4 Retry
vbIgnore 5 Ignore
vbYes 6 Yes
vbNo 7 No
Resumo da matéria
Mod. Formulários para Utilizadores
5
Formulários Personalizados
Para criar um formulário temos de ir a Programador, e depois Visual Basic. Com o botão
esquerdo do rato clicamos em cima de uma das folhas ou livro. O Form fica associado ao Livro
de Excel e não a uma folha.
Resumo da matéria
Mod. Formulários para Utilizadores
5
Toolbox
Checkbox Listbox
OptionButton CommandButton
Frame
TabStrip
Image
MultiPage
ToogleButton ScrollBar Spinbutton
Resumo da matéria
Mod. Formulários para Utilizadores
5 Label
Textbox
Resumo da matéria
Mod. Formulários para Utilizadores
5 Combobox
A ComboBox serve para escolher um valor de uma lista predefinida, tendo o utilizador
a possibilidade de inserir um valor não presente.
Listbox
O ListBox serve para apresentar uma lista de itens previamente definidos, onde o
utilizador pode escolher múltiplos itens.
Resumo da matéria
OptionButton
Resumo da matéria
Frame
Resumo da matéria
TabStrip
O Tabstrip é idêntico ao Multipage, somente não tem área para acomodar objetos, e é
mais difícil de controlar.
Resumo da matéria
O Multipage serve para apresentar uma área dividida por tabuladores, onde por cada
um podemos inserir objetos.
ScrollBar
O Scrollbar serve para controlar um determinado objeto, por sua vez controlado por um
cursor numérico.
Resumo da matéria
O Spinbutton serve para controlar um determinado objeto, por sua vez controlado por
um cursor numérico, a diferença é que incrementa um valor de cada vez.
Image
O Image serve para inserir uma imagem no Form. A imagem fica inserida no livro de
Excel.