Blog Archive
-
▼
2005
(103)
-
▼
janeiro
(23)
- Visualização de Formulário (III)
- VBE: Visualização de Formulário (II)
- VBE: Visualização de Formulário
- Excel: Utilização da Função SUBSTITUTE() ou SUBST()
- Excel: Exemplo de Array
- Novo Blog sobre Excel
- Excel: Múltiplos CountIf()
- VBE: geração de gráficos tridimensionais
- Excel: Shortcuts
- Excel: Moldar Texto
- VBE: Preenchimento de Caixa de Combinação (ComboBox)
- VBE: O evento WorkSheet_Change()
- Andrew's Utilities
- VBE: Editar Campos - Alterar dados
- VBE: Utilização de SpinButton
- VBE: Preencher campos de Formulário com os dados c...
- VBE: Formulários transparentes
- Excel: Linkar para o Word
- Formatação personalizada - Cor II
- Excel: Formatação personalizada - Cor
- Excel: Formatos personalizados - O formato nulo
- Excel: Formatação Condicional, com Fórmula como co...
- VBE: Formulários
-
▼
janeiro
(23)
About Me
Com tecnologia do Blogger.
Seguidores
Estatisticas
2005-01-30
Visualização de Formulário (III)
4:42 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
De acordo com os dois posts anteriores, torna-se evidente que, usando o evento Worksheet_BeforeDoubleClick, será também possível mostrar mais do que um Userform:
Se fizermos duplo clique numa das células do Range A1:A5, o resultado será:
Se fizermos duplo clique numa das células do Range B1:B5, o resultado será:
O Código:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim rng1 As Range, rng2 As Range
Set rng1 = Range("a1:a5")
Set rng2 = Range("b1:b5")
If Not Intersect(Target, rng1) Is Nothing Then
UserForm1.Show
Else
Cancel = True
End If
If Not Intersect(Target, rng2) Is Nothing Then
UserForm2.Show
Else
Cancel = True
End If
End Sub
Se fizermos duplo clique numa das células do Range A1:A5, o resultado será:
Se fizermos duplo clique numa das células do Range B1:B5, o resultado será:
O Código:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim rng1 As Range, rng2 As Range
Set rng1 = Range("a1:a5")
Set rng2 = Range("b1:b5")
If Not Intersect(Target, rng1) Is Nothing Then
UserForm1.Show
Else
Cancel = True
End If
If Not Intersect(Target, rng2) Is Nothing Then
UserForm2.Show
Else
Cancel = True
End If
End Sub
2005-01-28
VBE: Visualização de Formulário (II)
4:29 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Se pretendermos que a visualização do UserForm seja limitado a um ou vários Ranges, então podemos inserir o seguinte Código:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim rng1 As Range, rng2 As Range
Set rng1 = Range("a1:a10")
Set rng2 = Range("b1:b10")
If Not Intersect(Target, rng1) Is Nothing Then
UserForm1.Show
Else
Cancel = True
End If
If Not Intersect(Target, rng2) Is Nothing Then
UserForm1.Show
Else
Cancel = True
End If
End Sub
Assim,ao fazer-se duplo clique em qualquer célula do(s) Range(s) indicados e só nessas células, é que o UserForm é apresentado.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim rng1 As Range, rng2 As Range
Set rng1 = Range("a1:a10")
Set rng2 = Range("b1:b10")
If Not Intersect(Target, rng1) Is Nothing Then
UserForm1.Show
Else
Cancel = True
End If
If Not Intersect(Target, rng2) Is Nothing Then
UserForm1.Show
Else
Cancel = True
End If
End Sub
Assim,ao fazer-se duplo clique em qualquer célula do(s) Range(s) indicados e só nessas células, é que o UserForm é apresentado.
2005-01-27
VBE: Visualização de Formulário
11:56 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Se pretendermos ver um formulário (que criámos anteriormente) ao efectuarmos duplo clique numa célula de uma worksheet, acedemos ao código dessa worksheet (clicando no tabulador com a tecla direita do mouse):
e escrevemos o seguinte código:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
UserForm1.Show
Cancel = True
End Sub
Ao fazer-se duplo clique em qualquer célula da worksheet1, o resultado será o seguinte:
e escrevemos o seguinte código:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
UserForm1.Show
Cancel = True
End Sub
Ao fazer-se duplo clique em qualquer célula da worksheet1, o resultado será o seguinte:
2005-01-24
Excel: Utilização da Função SUBSTITUTE() ou SUBST()
12:32 da manhã |
Publicada por
JRod - PORTUGAL |
Editar mensagem
2005-01-23
Excel: Exemplo de Array
2:54 da manhã |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Se pretendermos contar (somar) as ocorrências contidas num determinado Range ( no exemplo C1:C13) e que obedeçam a critérios estabelecidos entre duas células (no exemplo, as células A1=2 e B1=5, ou seja entre 2 e 5), já não utilizaremos a Função COUNTIF() mas a Função SUM(). Assim, podemos inserir, p. ex. em B6, a seguinte Fórmula, com a utilização de um Array (CTRL + SHIFT + ENTER):
O resultado será: 6 ocorrências entre 2 e 5 no Range C1:C13
O resultado será: 6 ocorrências entre 2 e 5 no Range C1:C13
2005-01-17
Novo Blog sobre Excel
5:45 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Há um novo Blog sobre Excel:
Excel Pragma
Excel Pragma
Excel: Múltiplos CountIf()
5:02 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Se pretendermos contar as ocorrências contidas num determinado Range ( no exemplo C1:C13) e que obedeçam a critérios estabelecidos em certas células (no exemplo, as células A1 e B1), então podemos inserir, p. ex. em A3, a seguinte Fórmula, com a utilização de múltiplos COUNTIF() [ou CONTAR.SE()]:
=COUNTIF(C1:C13;A1)+COUNTIF(C1:C13;B1)
=COUNTIF(C1:C13;A1)+COUNTIF(C1:C13;B1)
2005-01-15
VBE: geração de gráficos tridimensionais
4:54 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
van Gelder- Excel Resources, mostrou como se pode gerar uma superfície tridimensional, utilizando o Excel, através de funções e de um gráfico de superfície.
De cada vez que se pressiona a tecla de função F9, é gerado um novo gráfico.
O respectivo workbook pode ser baixado AQUI.
Excel: Shortcuts
4:30 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Em 14/12/2004, referi, como exemplos de cópias de conteúdos da primeira célula de um Range para a totalidade desse mesmo Range, as teclas de atalho CTRL + R (para linhas) e CTRL + D (para colunas).
Hoje, mostro uma nova tecla de atalho, que funciona para os dois casos - linhas e/ou colunas - CTRL + Enter:
1º marca-se o Range pretendido e digita-se a fórmula:
2º carrega-se nas teclas de atalho CTRL + Enter - o resultado é:
Hoje, mostro uma nova tecla de atalho, que funciona para os dois casos - linhas e/ou colunas - CTRL + Enter:
1º marca-se o Range pretendido e digita-se a fórmula:
2º carrega-se nas teclas de atalho CTRL + Enter - o resultado é:
Excel: Moldar Texto
12:55 da manhã |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Muitas vezes, quando inserimos texto numa célula e a extensão do mesmo é maior que a largura da célula, o aspecto é o seguinte:
Uma maneira de moldar o texto, de modo a que caiba todo dentro da célula é clicar na tecla direita do rato, escolher Formatar Células, seleccionar o tabulador Alinhamento e marcar a Caixa de Verificação chamada "Moldar Texto":
O resultado é este:
Uma maneira de moldar o texto, de modo a que caiba todo dentro da célula é clicar na tecla direita do rato, escolher Formatar Células, seleccionar o tabulador Alinhamento e marcar a Caixa de Verificação chamada "Moldar Texto":
O resultado é este:
2005-01-13
VBE: Preenchimento de Caixa de Combinação (ComboBox)
5:10 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Quando criamos uma Caixa de Combinação dentro de um UserForm,
em vez de preencher o campo RowSource nas Propriedades da Caixa,
podemos optar pelo seu preenchimento
através de VBE.
O Código:
Private Sub UserForm_Initialize()
ContarEntradas
CarregarCaixa
lblTitulo.SetFocus
End Sub
Sub CarregarCaixa()
Dim genero(14) As String
genero(0) = "Romance"
genero(1) = "Policial"
genero(2) = "Técnico"
genero(3) = "Estudo"
genero(4) = "Clássico"
genero(5) = "Crónica"
genero(6) = "História"
genero(7) = "Informática"
genero(8) = "Literatura"
genero(9) = "Direito"
genero(10) = "Economia.Gestão"
genero(11) = "Esoterismo"
genero(12) = "Dicionário.Enciclopédia"
genero(13) = "Poesia"
genero(14) = "Não Classificado"
cboGenero.List = genero()
End Sub
2005-01-12
VBE: O evento WorkSheet_Change()
4:31 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Se pretendermos provocar uma ocorrência sempre uma determinada célula é alterada, podemos socorre-nos do evento WorkSheet_Change().
Tomemos o seguinte exemplo:
Se se pretender que, sempre que se insira um novo valor em A1, apareça em B1 metade do valor inserido em A1, adicionado ao valor que antes estava em B1, ou seja:
1ª inserção em A1 = 36, logo, B1 deverá tomar o valor 18 (36/2)
2ª inserção em A1 = 24, logo, B1 deverá tomar o valor 30 (24/2=12 + 18)
então, o Código poderá ser o seguinte:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Target.Offset(0, 1).Value = Target.Offset(0, 1).Value + Target.Value / 2
End If
End Sub
Tomemos o seguinte exemplo:
Se se pretender que, sempre que se insira um novo valor em A1, apareça em B1 metade do valor inserido em A1, adicionado ao valor que antes estava em B1, ou seja:
1ª inserção em A1 = 36, logo, B1 deverá tomar o valor 18 (36/2)
2ª inserção em A1 = 24, logo, B1 deverá tomar o valor 30 (24/2=12 + 18)
então, o Código poderá ser o seguinte:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Target.Offset(0, 1).Value = Target.Offset(0, 1).Value + Target.Value / 2
End If
End Sub
2005-01-10
Andrew's Utilities
11:15 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Andrew Engwirda (Andrew's Excel Tips) elaborou uma série de utilidades em add-in aberto
que pode ser baixado AQUI.
VBE: Editar Campos - Alterar dados
9:27 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
O Código:
Private Sub CommandButton1_Click() 'Botão Altera-OK
Cells(nRow, "A") = TextBox1.Text ' As células tomam os novos dados
Cells(nRow, "B") = TextBox2.Text
Cells(nRow, "C") = TextBox3.Text
End Sub
2005-01-09
VBE: Utilização de SpinButton
10:52 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Em vez de utilizarmos Botões de Comando, podemos usar o SpinButton:
O resultado no Formulário é:
O Código:
Private Sub SpinButton1_SpinUp()
nRow = nRow + 1 'Incrementa 1 linha
'mostra os dados
TextBox1.Text = Cells(nRow, "A")
TextBox2.Text = Cells(nRow, "B")
TextBox3.Text = Cells(nRow, "C")
End Sub
Private Sub SpinButton1_SpinDown()
If nRow = 2 Then ' se a linha for a 2 (1ª linha de dados)
Exit Sub 'já não decrementa
Else
nRow = nRow - 1 'Decrementa 1 linha
End If
'mostra os dados
TextBox1.Text = Cells(nRow, "A")
TextBox2.Text = Cells(nRow, "B")
TextBox3.Text = Cells(nRow, "C")
End Sub
O resultado no Formulário é:
O Código:
Private Sub SpinButton1_SpinUp()
nRow = nRow + 1 'Incrementa 1 linha
'mostra os dados
TextBox1.Text = Cells(nRow, "A")
TextBox2.Text = Cells(nRow, "B")
TextBox3.Text = Cells(nRow, "C")
End Sub
Private Sub SpinButton1_SpinDown()
If nRow = 2 Then ' se a linha for a 2 (1ª linha de dados)
Exit Sub 'já não decrementa
Else
nRow = nRow - 1 'Decrementa 1 linha
End If
'mostra os dados
TextBox1.Text = Cells(nRow, "A")
TextBox2.Text = Cells(nRow, "B")
TextBox3.Text = Cells(nRow, "C")
End Sub
VBE: Preencher campos de Formulário com os dados contidos nas células
9:56 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Código:
Public nRow As Long 'Declara a Variável como Pública,no início do Módulo
Private Sub UserForm_Initialize() ' Inicia o Form mostrando linha 2
'(1ª linha de dados)
If nRow < 2 Then
nRow = 2
End If
'mostra os dados
TextBox1.Text = Cells(nRow, "A")
TextBox2.Text = Cells(nRow, "B")
TextBox3.Text = Cells(nRow, "C")
End Sub
Private Sub CommandButton1_Click() ' Botão Seguinte
nRow = nRow + 1 'Incrementa 1 linha
'mostra os dados
TextBox1.Text = Cells(nRow, "A")
TextBox2.Text = Cells(nRow, "B")
TextBox3.Text = Cells(nRow, "C")
End Sub
Private Sub CommandButton2_Click() ' Botão Anterior
If nRow = 2 Then ' se a linha for a 2 (1ª linha de dados)
Exit Sub 'já não decrementa
Else
nRow = nRow - 1 'Decrementa 1 linha
End If
'mostra os dados
TextBox1.Text = Cells(nRow, "A")
TextBox2.Text = Cells(nRow, "B")
TextBox3.Text = Cells(nRow, "C")
End Sub
2005-01-08
VBE: Formulários transparentes
3:31 da manhã |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Visto em:
VBA Visual Basic for Applications (Microsoft) Forum
O Código:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" _
(ByVal hWnd As Long, ByVal crey As Byte, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_LAYERED = &H80000
Private Const LWA_ALPHA = &H2&
Public hWnd As Long
Private Sub UserForm_Initialize()
Dim bytOpacity As Byte
bytOpacity = 180 ' variável que fornece o nível de opacidade. Pode ir de 0 a 255
hWnd = FindWindow("ThunderDFrame", Me.Caption)
Call SetWindowLong(Me.hWnd, GWL_EXSTYLE, _
GetWindowLong(Me.hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED)
Call SetLayeredWindowAttributes(Me.hWnd, 0, bytOpacity, LWA_ALPHA)
End Sub
2005-01-07
Excel: Linkar para o Word
10:15 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Se criarmos uma tabela numa folha do Excel e pretendermos inseri-la num documento do Word de modo a que, sempre que haja alteração na grelha, a mesma se reflicta automaticamente no documento do Word,
1º- No Excel, marcam-se as células pretendidas e copiam-se para o clipboard [CTRL + C]
2º- No Word, no local pretendido, escolhe-se Editar>Colar Especial>Colar ligação>Como: Texto formatado (RTF) e OK:
3º- Guardam-se os dois trabalhos (folha e doc):
Agora, sempre que se altera na grelha, altera-se também no documento:
1º- No Excel, marcam-se as células pretendidas e copiam-se para o clipboard [CTRL + C]
2º- No Word, no local pretendido, escolhe-se Editar>Colar Especial>Colar ligação>Como: Texto formatado (RTF) e OK:
3º- Guardam-se os dois trabalhos (folha e doc):
Agora, sempre que se altera na grelha, altera-se também no documento:
Formatação personalizada - Cor II
3:09 da manhã |
Publicada por
JRod - PORTUGAL |
Editar mensagem
No entanto, pode usar-se mais do que oito cores, através das 56 cores da palette de escolhas de cor, utilizando o tipo [Color#],
em que # se refere a um número entre 1 e 56 da palette
(1= 1ª cor da lista - Preto; 2= 2ª cor da lista - Branco ... 56= última cor da lista - Cinzento Escuro) e utilizar-se igualmente símbolos, como seja o adicionar (+) e o subtrair (-)
Exemplo:
em que # se refere a um número entre 1 e 56 da palette
(1= 1ª cor da lista - Preto; 2= 2ª cor da lista - Branco ... 56= última cor da lista - Cinzento Escuro) e utilizar-se igualmente símbolos, como seja o adicionar (+) e o subtrair (-)
Exemplo:
2005-01-06
Excel: Formatação personalizada - Cor
2:55 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Na formatação personalizada, podem seleccionar-se até quatro cores (das oito cores possíveis: Azul, Vermelho, Amarelo, Verde, Branco, Preto, Magenta e Turquesa).
No exemplo, seleccionaram-se as quatro primeiras(Azul para valores positivos, Vemelho para valores negativos, Amarelo para valores zero e Verde para texto):
No exemplo, seleccionaram-se as quatro primeiras(Azul para valores positivos, Vemelho para valores negativos, Amarelo para valores zero e Verde para texto):
2005-01-05
Excel: Formatos personalizados - O formato nulo
6:19 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
O formato nulo (;;;) oculta o conteúdo da célula A2:
Antes da formatação:
Depois da formatação:
Antes da formatação:
Depois da formatação:
2005-01-03
Excel: Formatação Condicional, com Fórmula como condição
4:53 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
A título de exemplo, uma grelha de números e de estrelas, sendo que A1:E1 são os 5 números saídos e F1:G1, as 2 estrelas saídas:
A formatação condicional para a grelha de números, partindo do princípio que os campos a verde correspondem aos números escolhidos (no exemplo, E6 corresponderá ao nº 4, E8 ao 16, etc):
A formatação condicional para a grelha de estrelas, partindo do princípio que os campos a azul correspondem aos números escolhidos (no exemplo, C16 corresponderá ao nº 2 e E16 ao 7):
A formatação condicional para a grelha de números, partindo do princípio que os campos a verde correspondem aos números escolhidos (no exemplo, E6 corresponderá ao nº 4, E8 ao 16, etc):
A formatação condicional para a grelha de estrelas, partindo do princípio que os campos a azul correspondem aos números escolhidos (no exemplo, C16 corresponderá ao nº 2 e E16 ao 7):
2005-01-02
VBE: Formulários
7:33 da tarde |
Publicada por
JRod - PORTUGAL |
Editar mensagem
Inserção de dados numa folha (no exemplo denominada "DADOS") através de um formulário:
Procedimento na folha:
Definir o nome "Dados" para a tabela (através de Insert>Name>Define), com a Referência
=OFFSET(Dados!$A$1;0;0;COUNTA(Dados!$A:$A);2)
Procedimentos para o formulário:
Procedimentos a usar:
Private Sub CommandButton1_Click() ' Refere-se ao Botão do Formulário "ADICIONA"
Dim IntNext As Integer
'Conta as linhas preenchidas existentes na grelha e adiciona 1
IntNext = Range("Dados").Rows.Count + 1
'Envio dos valores inseridos nos campos para a grelha
Range("A" & IntNext) = Numero.Value
Range("B" & IntNext) = Data.Value
Range("C" & IntNext) = Nome.Value
'Para limpar os campos do Userform, por forma a receber novos dados
Numero = ""
Data = ""
Nome = ""
' Volta a chamar o procedimento para contar o número de linhas
Call NextNumero
'Coloca o foco no campo Data
Data.SetFocus
End Sub
Private Sub UserForm_Initialize()
Call NextNumero
End Sub
Private Sub NextNumero()
Numero = Range("Dados").Rows.Count
End Sub
NOTA: As TextBox1, 2 e 3 têm que alterar o nome para: Numero,Data e Nome, respectivamente.
Procedimento na folha:
Definir o nome "Dados" para a tabela (através de Insert>Name>Define), com a Referência
=OFFSET(Dados!$A$1;0;0;COUNTA(Dados!$A:$A);2)
Procedimentos para o formulário:
Procedimentos a usar:
Private Sub CommandButton1_Click() ' Refere-se ao Botão do Formulário "ADICIONA"
Dim IntNext As Integer
'Conta as linhas preenchidas existentes na grelha e adiciona 1
IntNext = Range("Dados").Rows.Count + 1
'Envio dos valores inseridos nos campos para a grelha
Range("A" & IntNext) = Numero.Value
Range("B" & IntNext) = Data.Value
Range("C" & IntNext) = Nome.Value
'Para limpar os campos do Userform, por forma a receber novos dados
Numero = ""
Data = ""
Nome = ""
' Volta a chamar o procedimento para contar o número de linhas
Call NextNumero
'Coloca o foco no campo Data
Data.SetFocus
End Sub
Private Sub UserForm_Initialize()
Call NextNumero
End Sub
Private Sub NextNumero()
Numero = Range("Dados").Rows.Count
End Sub
NOTA: As TextBox1, 2 e 3 têm que alterar o nome para: Numero,Data e Nome, respectivamente.
Subscrever:
Mensagens (Atom)