• Nenhum resultado encontrado

Private Sub Corpo_Change() Call AtualizaContagem DoCmd.RunCommand accmdsave End Sub

N/A
N/A
Protected

Academic year: 2021

Share "Private Sub Corpo_Change() Call AtualizaContagem DoCmd.RunCommand accmdsave End Sub"

Copied!
17
0
0

Texto

(1)

MontaRibbons 4.0

Vetores e Matrizes

Manipulação de Strings (Contagem de Caracteres)

Funções e Sub-rotinas

Login no Sistema

Segurança de Dados

Mala Direta (Access X Word) com VBA

Alterando a Fonte de Registro a Cada Novo Ano Automaticamente

Brincando com o Looping For ... Next

Brincando com Comboboxes

Manipulando Strings no VBA (Contagem de Caracteres)

Em caixa de textos do tipo Memorando e formatação Rich Text você pode com o seguinte código no evento Change contar os caracteres que são digitados a partir de uma caixa de texto não acoplada e sem formatação:

Private Sub Corpo_Change()

Call AtualizaContagem

DoCmd.RunCommand acCmdSave

End Sub

Public Sub AtualizaContagem()

On Error Resume Next

Dim nCar As Integer

Dim strMsg As String

Dim strTitle As String

Dim intRetVal As Integer

If Not IsNull(Corpo) Or Corpo <> "" Then

nCar = Len(Corpo) ‘Define o comprimento ou número de

caracteres existentes na caixa de texto do tipo Memorando e

formatação Rich Text

nCar = 0

nCar = nCar + 1 ‘Contador de caracteres

Me.txtCar = nCar ‘txtCar é o nome da caixa de texto não

acoplada sem formatação. Coloque na fonte de controle a

seguinte sintaxe: =Len(Corpo) que vai virar =Compr([corpo])

DoCmd.RunCommand acCmdSave ‘Este commando atualizará

a contagem a partir de nCar

‘********************************************************************************

***

(2)

‘Código complementar para dar um refino em detalhes para

limitar o número de caracteres digitado

If txtCar = 800 Then

MsgBox "Atingido o limite máximo de caracteres permitido !!!",

vbCritical, "Máximo de Caracteres"

Corpo.Locked = True

strTitle = "Liberação"

strMsg = "Deseja liberar para digitar mais ou deletar

informação extra? No primeiro caso, lembre-se que o corpo sairá

da estética padrão. Continuar?"

intRetVal = MsgBox(strMsg, vbQuestion + vbYesNo, strTitle)

Select Case intRetVal

Case vbYes

Corpo.Locked = False

Case vbNo

Corpo.Locked = True

End Select

Else

Corpo.Locked = False

End If

End If

End Sub

Para implementar ainda mais a análise do texto digitado incluí mais uma sub-rotina para limitar o texto digitado e realizar uma análise crítica do documento.

Public Sub LimitarCaracteres()

On Error Resume Next

Me.Refresh

Dim sCar As Long

Const nMax = 800

Corpo.Locked = False

sCar = Len(Corpo)

MsgBox "Você já digitou " & sCar & " caracteres. Máximo é de

800 caracteres !!!", vbInformation, "Limite de Caracteres"

If sCar >= nMax Then

Corpo.Locked = True

MsgBox "Você chegou ao limite de caracteres para integrar o

corpo do memorando !!!", vbCritical, "Limite de Caracteres"

Beep

(3)

MsgBox "Digitados " & sCar & " caracteres !!!", vbInformation,

"Máximo de Caracteres Digitados"

End If

End Sub

FUNÇÕES X SUB-ROTINAS

Qual é a diferença entre uma Função e uma Sub-Rotina? A diferença entre uma função e uma sub-rotina é que a primeira retorna um valor, enquanto a segunda executa uma tarefa.

Vamos primeiramente dar uma olhada em funções e como elas podem ser úteis para resolver inúmeros problemas em VBA. Vou destacar algumas que já criei para que você programador possa ir já aprendendo a desenvolvê-las e utilizá-las em seus aplicativos. Vamos ver então primeiramente funções sem parâmetros.

FUNÇÕES PRÁTICAS (1)

Private Function Tabuada() Dim i As Integer

‘Bloco For...Next

******************************************************************************** For i = 1 To 10

Tabuada = Valor * i

MsgBox "O valor " & Valor & " vezes " & i & " é " & Tabuada, vbInformation, "Tabuada" Next i ‘************************************************************************************** End Function (2)

Public Function Substituir() As String On Error Resume Next

Dim sRua As String Dim sAvn As String Dim sEtr As String

If Not IsNull(Endereco) Then ‘Endereco é o nome do campo em sua tabela presente no formulário

sRua = Replace(Endereco, "Rua", "R") 'Expression(ou nome do campo), Find(procura a string antiga), Replace(Substitui por esta nova string)

Endereco = sRua

(4)

Find(procura a string antiga), Replace(Substitui por esta nova string) Endereco = sEtr

sAvn = Replace(Endereco, "Avenida", "Avn") 'Expression(ou nome do campo), Find(procura a string antiga), Replace(Substitui por esta nova string) Endereco = sAvn

Substituir = Endereco ‘Aqui a função recebe o valor Resultante Else

Exit Function End If

End Function

‘Na saída do campo Endereco chame a função. Private Sub Endereco _Exit(Cancel As Integer)

Call Substituir() 'Chama a função na saída do campo endereço End Sub

(3)

Public Function CalculaTaxa() Dim nTaxa As Double

Dim jurocredito As Double Dim juroDebito As Double Dim jurovoucher As Double Dim parc As Integer

parc = Nz(Parcela)

' Atualizando a caixa taxa com valor da taxa de credito

If Me!Descricao = "Credito" Then

jurocredito = DLookup("CpJuros", "tblJuros", "CpTipo = 'Crédito' And CodParcelaCred = " & parc)

Me.valortaxa = jurocredito nTaxa = valortaxa

CalculaTaxa = nTaxa End If

' Atualizando a caixa taxa com valor da taxa de debito

If Me!Descricao = "Debito" Then

juroDebito = DLookup("CpJuros", "tblJuros", "CpTipo = 'Débito' And CodParcelaDeb = " & parc)

Me.valortaxa = juroDebito nTaxa = valortaxa

CalculaTaxa = nTaxa End If

‘Atualizando a caixa taxa com valor da taxa de voucher

(5)

' atualizando a caixa taxa com valor da taxa de voucher

jurovoucher = DLookup("CpJuros", "tblJuros", "CpTipo = 'Voucher' And CodParcelaVou = " & parc)

Me.valortaxa = jurovoucher nTaxa = valortaxa CalculaTaxa = nTaxa End If Me.Datavenda.SetFocus End Function

Como é que fica a tabela de juros (tblJuros)? Nome do campo Tipo de dados

Id_Tipo Numeração Automática

CpTipo Texto CpJuros Número CodParcelaCred Número ParcelaCred Número CodParcelaDeb Número ParcelaDeb Número CodParcelaVou Número ParcelaVou Número tblJuros ID_Ti po CpTipo CpJur os CodParcela Cred ParcelaC red CodParcela Deb Parcela Deb CodParcela Vou Parcela Vou 1 Crédito 3,8 1 1 2 Débito 2,2 1 1 3 Vouch er 7,5 1 1 4 Parcela do 7,5 5 Crédito 6,5 2 2 6 Débito 6,5 2 2 7 Vouch er 6,5 2 2

(6)

Agora vamos aprender a criar funções parametrizadas ou com parâmetros.

(1) Com um parâmetro

Public Function EncontreErrosOrtográficos(nTexto As String) On Error Resume Next

nTexto = CInt(InputBox("Você pretende fazer uma correção ortográfica?" & vbCrLf & _

"1 - Yes " & vbCrLf & _

"2 - No ", "Erros Ortográficos")) Select Case nTexto

Case Is = 1

DoCmd.RunCommand acCmdSpelling Case Is = 2

Exit Function End Select

nTexto = Resposta 'Resposta é o nome da caixa de texto do tipo Texto ou do tipo Memorando

EncontreErrosOrtográficos = nTexto End function

Código da saída da caixa de texto Resposta. Private Sub Resposta_Exit(Cancel As Integer) Dim nTexto As String

Call EncontreErrosOrtográficos(nTexto) End Sub

(2) Função para identificar o usuário com dois parâmetros

Public Function VerificaLogin(sLogin As String, sSenha As String) Dim nLogin As String

Dim nSenha As String

nLogin = login 'login é o nome da caixa de texto do formulário de Login nSenha = senha 'senha é o nome da caixa de texto do formulário de Login sLogin = Nz(DLookup("login", "tblCadastro", "login = '" & nLogin & "'")) ‘A função Nz

sSenha = Nz(DLookup("senha", "tblcadastro", "login = '" & sLogin & "'"))

If sLogin <> "" Then

MsgBox "Nome OK", vbInformation, "Testa Login" End If

(7)

If sSenha = nSenha Then

MsgBox "Senha válida !!!", vbInformation, "Testa Login"

DoCmd.OpenForm "frmteste", acNormal 'Se a senha for válida abre

o formulário principal

Else

MsgBox "Senha inválida !!!", vbInformation, "Testa Login"

End If

End Function

Código do botão OK (cmdEntrar)

Private Sub cmdEntrar_Click()

If Not IsNull(login) And Not IsNull(senha) Then If VerificaLogin(login, senha) = True Then

DoCmd.Close acForm, "frmTesteLogin", acSaveYes End If

End If End Sub

SUB-ROTINAS PRÁTICAS (1)

Public Sub RemoveTexto() On Error Resume Next Dim nENDERECO As String Dim strTexto As String Dim intPos As String

nENDERECO = ENDERECO

intPos = InStr(1, nENDERECO, ",") 'Localiza a vírgula na string de endereço a partir do primeiro caracter

strTexto = Trim(Left(nENDERECO, intPos)) 'Remove a string à esquerda da vírgula para inclusão de uma nova numeração pela consulta da minha combo cuja fonte de dados é uma consulta dos endereços pelo campo ENDERECO de minha tabela

ENDERECO = strTexto End Sub

No evento duplo-clique do campo ENDEREÇO:

Private Sub ENDERECO_DblClick(Cancel As Integer) If Not IsNull(ENDERECO) Then

Call RemoveTexto 'Chama a sub-rotina que remove os caracteres à esquerda da vírgula

(8)

MsgBox "Atualize o campo ENDERECO com a nova numeração agora !!!", vbInformation, "CONTROLE DE ORDEM DE SERVIÇO"

Else

MsgBox "O campo ENDERECO está em branco !!!", vbQuestion, "CONTROLE DE ORDEM DE SERVIÇO"

End If End Sub

(2) Um trecho de código do aplicativo Gerador de Relatórios Public Sub AcrescentarNivel()

On Error Resume Next Dim strRegistro As String Dim strAssunto As String Dim strStatus As String Dim n As Integer

Dim strMsg As String Dim strTitle As String Dim intRetVal As Integer

strTitle = "Criar Relatório"

strMsg = "Deseja acrescentar um Nível?"

intRetVal = MsgBox(strMsg, vbQuestion + vbYesNo, strTitle) Select Case intRetVal

Case vbYes

If Nível = Format(Nível, "0.0") Then 'Se o formato do código for com ponto acrescenta o próximo Nível

n = Mid(Forms!CriarRelatorioII!Nível, 3, 3) 'Pega o último dígito do último código

n = n + 1

strRegistro = Mid(Forms!CriarRelatorioII!Nível, 1, 1) & "." & n 'Formata o código e acrescenta uma unidade ao valor depois do ponto

strRegistro = Replace(strRegistro, ",", ".") 'Corrige e reformata o código strAssunto = Assunto

DoCmd.SetWarnings False

strRegistro = "INSERT INTO Pai(Nível,Assunto) VALUES('" & strRegistro & "', '" & strAssunto & "')"

DoCmd.RunSQL strRegistro

DoCmd.RunCommand acCmdRefresh DoCmd.SetWarnings True

MsgBox "Dados Alterados com sucesso !!!", vbExclamation, "Criar Relatorio" Else 'Caso o contrário

n = Mid(Forms!CriarRelatorioII!Nível, 3, 3) 'Pega o último dígito do último código

(9)

strRegistro = Mid(Forms!CriarRelatorioII!Nível, 1, 1) & "." & n 'Formata o código e acrescenta uma unidade ao valor depois do ponto

strRegistro = Replace(strRegistro, ",", ".") strAssunto = Assunto

DoCmd.SetWarnings False

strRegistro = "INSERT INTO Pai(Nível,Assunto) VALUES('" & strRegistro & "', '" & strAssunto & "')"

DoCmd.RunSQL strRegistro

DoCmd.RunCommand acCmdRefresh DoCmd.SetWarnings True

MsgBox "Dados Alterados com sucesso !!!", vbExclamation, "CriarRelatorio" End If Case vbNo Exit Sub End Select End If LOGIN NO SISTEMA

Public Function VerificaLogin(sLogin As String, sSenha As String) Dim nLogin As String

Dim nSenha As String

nLogin = login 'login é o nome da caixa de texto do formulário de Login nSenha = senha 'senha é o nome da caixa de texto do formulário de Login sLogin = Nz(DLookup("login", "tblCadastro", "login = '" & nLogin & "'")) ‘A função Nz

sSenha = Nz(DLookup("senha", "tblcadastro", "login = '" & sLogin & "'"))

If sLogin <> "" Then

MsgBox "Nome OK", vbInformation, "Testa Login" End If

If sSenha = nSenha Then

MsgBox "Senha válida !!!", vbInformation, "Testa Login"

DoCmd.OpenForm "frmteste", acNormal 'Se a senha for válida abre

o formulário principal

Else

MsgBox "Senha inválida !!!", vbInformation, "Testa Login"

End If

End Function

Código do botão OK (cmdEntrar)

Private Sub cmdEntrar_Click()

(10)

If Not IsNull(login) And Not IsNull(senha) Then If VerificaLogin(login, senha) = True Then

DoCmd.Close acForm, "frmTesteLogin", acSaveYes End If

End If End Sub

SEGURANÇA DE DADOS

Public Function verificaLogin(sLogin As String, sSenha As String)

Dim nLogin As String

Dim nSenha As String

Dim xLogin As String

Dim yLogin As String

Dim zLogin As String

Dim nCodigo As Integer

Dim x As String

Dim y As String Dim z As String nLogin = login nSenha = senha

x = Nz(DLookup("Nivel", "tblNiveis", "Codigo = 1")) y = Nz(DLookup("Nivel", "tblNiveis", "Codigo = 2")) z = Nz(DLookup("Nivel", "tblNiveis", "Codigo = 3"))

nCodigo = Nz(DLookup("Codigo", "tblCadastro", "login = '" & nLogin & "'")) sLogin = CStr(Nz(DLookup("login", "tblCadastro", "login = '" & nLogin & "'"))) sSenha = CStr(Nz(DLookup("senha", "tblcadastro", "login = '" & sLogin & "'"))) xLogin = CStr(Nz(DLookup("login", "tblCadastro", "Nivel = '" & x & "' And Codigo = " & nCodigo)))

yLogin = CStr(Nz(DLookup("login", "tblCadastro", "Nivel = '" & y & "' And Codigo = " & nCodigo)))

zLogin = CStr(Nz(DLookup("login", "tblCadastro", "Nivel = '" & z & "' And Codigo = " & nCodigo)))

If sLogin <> "" Then 'Valida usuário

MsgBox "Login válido !!! ", vbInformation, "Testa Login" If sSenha = nSenha Then 'Valida senha do usuário

MsgBox "Senha válida !!!", vbInformation, "Testa Login" If xLogin = sLogin Then

MsgBox "O nivel é de " & x & "", vbExclamation, "Testa Login" DoCmd.OpenForm "frmteste", acNormal, , , acFormEdit

DoCmd.Close acForm, "frmTesteLogin", acSaveYes ElseIf yLogin = sLogin Then

(11)

DoCmd.OpenForm "frmteste", acNormal, , , acFormAdd DoCmd.Close acForm, "frmTesteLogin", acSaveYes ElseIf zLogin = sLogin Then

MsgBox "O nivel é de " & z & "", vbExclamation, "Testa Login" DoCmd.OpenForm "frmteste", acNormal, , , acFormReadOnly DoCmd.Close acForm, "frmTesteLogin", acSaveYes

Else

Exit Function End If

Else

MsgBox "Senha inválida !!!", vbInformation, "Testa Login" End If

Else

MsgBox "Login inválido !!!", vbInformation, "Testa Login" End If

End Function

CALCULANDO TEMPO EM ANOS, MESES E DIAS ENTRE DUAS

DATAS

Vamos supor que você queira a partir do número de meses calcular o tempo em ano, meses e dias. Desenvolvi uma técnica de primeiro, calcular entre duas datas o número de meses e só a partir do resultado extrair o tempo em anos, meses e dias. Vamos ver, então, a função que calcula o tempo decorrido entre duas datas chama-se DateDiff ou DifData:

Public Function CalculaTempoServico(nData1 As Date, nData2 As Date) On Error Resume Next

Dim nts As Long

nData1 = Nz([DataInicial]) nData2 = Nz([DataFinal])

nts = Nz(DateDiff("m", nData1, nData2)) 'Calcula o total de meses pela diferença entre as datas

TempoServico = Nz(nts) End Function

Private Sub Atualizar_Click() On Error Resume Next

(12)

Dim nAno As Long Dim sAno As Long Dim nMes As Integer

Dim nTempoTotal As Long Dim TempAno As Long Dim TempMes As Long Dim CalcAno As Long Dim nDia As Long

Dim nDataInicial As Date Dim nDataFinal As Date Dim sMes As Long Dim sMes2 As Long

sMes = Month(DataInicial) sMes2 = Month(DataFinal) nTempoTotal = TempoTotal sAno = txtAno

nDataInicial = left(Format(DataInicial, "dd/mm/yyyy"), 2) nDataFinal = left(Format(DataFinal, "dd/mm/yyyy"), 2)

nAno = Nz(IIf(nTempoTotal <= 12, 0, Replace(left(([TempoTotal] / 12), 2), ",", ""))) 'Calcula ‘o total 'de anos. Se o total em meses for menor que 12, o total de anos é zero. Caso contrário pega os 'dois primeiros dígitos do quociente como total de anos.

nMes = Nz(CInt(Abs(nTempoTotal - (sAno * 12)))) 'Calcula o que sobra de meses. Uma vez ‘calculado o número de anos, capturo o valor em uma variável sAno, multiplico por 12 para ‘dar o número em meses e subtraio do total de meses.

nDia = IIf(sMes = sMes2, Abs(DateDiff("d", nDataInicial, nDataFinal)), 0) ‘Calcula a diferença em dias entre duas ‘datas

txtAno = Nz(nAno) txtMes = Nz(CInt(nMes)) txtDia = Nz(nDia)

DoCmd.RunCommand acCmdRefresh End Sub

MALA DIRETA (ACCESS X WORD) COM VBA

No documento Word, com este código, você não precisa procurar pelo

registro que você acabou de implantar lá no Access, isto no arquivo gerado

(13)

.mdb ou .accdb de seu projeto Mala Direta. Quando você abrir o documento,

criticará qualquer tentativa do usuário de digitar dentro do formulário e já irá

para o último registro que é o que você acabou de preencher no bd em Access.

Private Sub Document_Open()

Dim Texto As String

Texto = "POR FAVOR, NÃO PREENCHA NESTE FORMULÁRIO !!!"

MsgBox Texto, vbInformation, "MEU FORMULÁRIO"

Call IrParaUltimo End Sub Sub IrParaUltimo() ' IrParaUltimo Macro ' ' ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord End Sub

ALTERANDO A FONTE DE REGISTRO A CADA NOVO ANO AUTOMATICAMENTE

Se você usa uma mesma fonte de dados para o seu formulário de um aplicativo de sua empresa, um cadastro de funcionários por exemplo, não é necessário criar uma cópia, zera(r) a(s) tabela(s), isto é, ter todo esse trabalho na virada do ano. Com um simples código você pode alterar somente o ano e trocar a fonte de registro, sua tabela por outra tabela. Mas para isso você precisa criar tantas tabelas anuais quanto desejar antes de tudo. Um único trabalho, mas vai deixar você tranquilo nos próximos anos e você nem precisa estar presente para atender o seu cliente.

Exemplo: Minha tabela atual chama-se ListadeFR2013. Crio então várias tabelas para os anos seguintes: ListadeFR2014, ListadeFR2015, etc Private Sub Form_Open(Cancel As Integer)

On Error Resume Next Dim nAno As Long Dim cal As String

cal = UCase(MonthName(Month(Date), True)) 'Variável que pega o mês atual Select Case cal

Case Is = "JAN"

nAno = InputBox("Digite o novo ano OU, o ano de pesquisa OU mantenha o ano atual: ", "FR", Default:=Year(Date))

(14)

Me.RecordSource = "SELECT * FROM ListadeFR" & nAno Case Is = "FEV"

nAno = InputBox("Digite o ano de pesquisa ou mantenha o ano vigente: ", "FR", Default:=Year(Date))

MsgBox "ListadeFR" & nAno & ".", vbInformation, "FICHA DE REVISÃO" Me.RecordSource = "SELECT * FROM ListadeFR" & nAno

Case Is = "MAR"

nAno = InputBox("Digite o ano de pesquisa ou mantenha o ano vigente: ", "FR", Default:=Year(Date))

MsgBox "ListadeFR" & nAno & ".", vbInformation, "FICHA DE REVISÃO" Me.RecordSource = "SELECT * FROM ListadeFR" & nAno

Case Is = "ABR"

nAno = InputBox("Digite o ano de pesquisa ou mantenha o ano vigente: ", "FR", Default:=Year(Date))

MsgBox "ListadeFR" & nAno & ".", vbInformation, "FICHA DE REVISÃO" Me.RecordSource = "SELECT * FROM ListadeFR" & nAno

Case Is = "MAI"

nAno = InputBox("Digite o ano de pesquisa ou mantenha o ano vigente: ", "FR", Default:=Year(Date))

MsgBox "ListadeFR" & nAno & ".", vbInformation, "FICHA DE REVISÃO" Me.RecordSource = "SELECT * FROM ListadeFR" & nAno

Case Is = "JUN"

nAno = InputBox("Digite o ano de pesquisa ou mantenha o ano vigente: ", "FR", Default:=Year(Date))

MsgBox "ListadeFR" & nAno & ".", vbInformation, "FICHA DE REVISÃO" Me.RecordSource = "SELECT * FROM ListadeFR" & nAno

Case Is = "JUL"

nAno = InputBox("Digite o ano de pesquisa ou mantenha o ano vigente: ", "FR", Default:=Year(Date))

MsgBox "ListadeFR" & nAno & ".", vbInformation, "FICHA DE REVISÃO" Me.RecordSource = "SELECT * FROM ListadeFR" & nAno

Case Is = "AGO"

nAno = InputBox("Digite o ano de pesquisa ou mantenha o ano vigente: ", "FR", Default:=Year(Date))

MsgBox "ListadeFR" & nAno & ".", vbInformation, "FICHA DE REVISÃO" Me.RecordSource = "SELECT * FROM ListadeFR" & nAno

Case Is = "SET"

nAno = InputBox("Digite o ano de pesquisa ou mantenha o ano vigente: ", "FR", Default:=Year(Date))

MsgBox "ListadeFR" & nAno & ".", vbInformation, "FICHA DE REVISÃO" Me.RecordSource = "SELECT * FROM ListadeFR" & nAno

Case Is = "OUT"

nAno = InputBox("Digite o ano de pesquisa ou mantenha o ano vigente: ", "FR", Default:=Year(Date))

MsgBox "ListadeFR" & nAno & ".", vbInformation, "FICHA DE REVISÃO" Me.RecordSource = "SELECT * FROM ListadeFR" & nAno

Case Is = "NOV"

nAno = InputBox("Digite o ano de pesquisa ou mantenha o ano vigente: ", "FR", Default:=Year(Date))

(15)

Me.RecordSource = "SELECT * FROM ListadeFR" & nAno Case Is = "DEZ"

MsgBox "Aguarde a entrada do novo ano para zerar o controle...", vbExclamation, "FICHA DE REVISÃO"

nAno = InputBox("Digite o ano de pesquisa ou mantenha o ano vigente: ", "FR", Default:=Year(Date))

MsgBox "ListadeFR" & nAno & ".", vbInformation, "FICHA DE REVISÃO" Me.RecordSource = "SELECT * FROM ListadeFR" & nAno

End Select End Sub

BRINCANDO COM O LOOPING For ... Next:

1- Crie um formulário com uma caixa de texto e dê um nome a ela. 2- No ambiente de código coloque esta função:

Public Function Analise() Dim s As Integer

Dim sCripto As String

For s = 1 To Len(txtPalavra) 'txtPalavra seria o nome de sua caixa de texto sCripto = Nz(Mid(txtPalavra, s, 1))

MsgBox sCripto 'Repare o que será exibido na variável sCripto. Em seguida,

troque a variável sCripto pela variável s. Next s

End Function

Código do botão Testar: Private Sub cmdTestar_Click() Call Analise

End Sub

BRINCANDO COM COMBOBOXES

Acho que este exemplo será muito prático para quem quer aprender a filtrar com as comboboxes. Aprenda a identificar quantas ruas existem em determinado bairro e qual o bairro correspondente a determinada rua.

ATENÇÃO: Coloque o código bairro da tabela tblBairros correspondente a cada rua da tabela tblRuas na tabela tblRuas.

Coloque três comboboxes e uma caixa de texto em seu formulário. Crie duas tabelas, uma para Ruas e outra para Bairros:

(16)

tblBairros:

CodBairro - Numeração Automática - com chave primária Bairro - Texto tblRuas: CodRua - Número Rua - Texto CodBairro - Número Bairro - Texto

NOTA: Insira ruas à vontade com o seu bairro respectivo na tabela tblRuas e código de Bairro correto.

'Filtra as ruas para o bairro selecionado Private Sub cboBairros_AfterUpdate() 'Código de Eduardo Machado (Good Guy) On Error Resume Next

Dim strMsg As Integer Dim sBairro As String

sBairro = Nz(cboBairros.Column(1))

strMsg = Nz(DLookup("CodBairro", "tblBairros", "Bairro = '" & sBairro & "'")) Me.cboRuas.RowSource = "SELECT tblRuas.CodRua, tblRuas.Rua FROM

tblRuas WHERE tblRuas.CodBairro = " & strMsg End Sub

'Propriedades desta combobox:

'Origem da linha : SELECT tblBairros.[CodBairro], tblBairros.[Bairro] FROM tblBairros ORDER BY tblBairros.Bairro;

'Número de colunas: 2

'Largura das colunas: 0cm;4cm;

'Filtra o bairro para a rua selecionada Private Sub cboRuas_AfterUpdate() 'Código de Eduardo Machado (Good Guy) On Error Resume Next

Dim strMsg As Integer Dim sRua As String

sRua = Nz(cboRuas.Column(1))

(17)

Me.cboBairros.RowSource = "SELECT tblBairros.CodBairro, tblBairros.Bairro FROM tblBairros WHERE tblBairros.CodBairro = " & strMsg

End Sub

'Propriedades desta combobox:

'Origem da linha : SELECT tblRuas.codRua, tblRuas.Rua FROM tblRuas ORDER BY tblRuas.Rua;

'Número de colunas: 2

'Largura das colunas: 0cm;4cm;

'Filtra o bairro para a rua selecionada, numa caixa de texto Private Sub cboRuas2_BeforeUpdate(Cancel As Integer) 'Código de Eduardo Machado (Good Guy)

On Error Resume Next Dim sRua As String

sRua = cboRuas2.Column(1)

Me.txtBairros = DLookup("Bairro", "tblRuas", "Rua = '" & sRua & "'") 'Caixa de texto que informará o bairro correspondente a esta rua

'Propriedades desta combobox:

'Origem da linha : SELECT tblRuas.codRua, tblRuas.Rua FROM tblRuas ORDER BY tblRuas.Rua;

'Número de colunas: 2

'Largura das colunas: 0cm;4cm; End

Referências

Documentos relacionados

Foram ainda incluídos quatro indicadores originais com o objetivo de avaliar o nível de interesse em informação sobre alimentação, o tipo de tema sobre o qual os indivíduos têm

Apesar dos esforços para reduzir os níveis de emissão de poluentes ao longo das últimas décadas na região da cidade de Cubatão, as concentrações dos poluentes

Para analisar as Componentes de Gestão foram utilizadas questões referentes à forma como o visitante considera as condições da ilha no momento da realização do

O Plano de Manutenção dos Monumentos é uma ferramenta de gestão e de conservação preventiva que tem os seguintes objetivos: melhorar a gestão de recursos (reduzindo custos a

The SUnSET bovine spermatozoa results demand the use of other translation elongation inhibitors, namely emetine, in place of cycloheximide, a competitive inhibitor of the

Além disso, conforme já destacado anteriormente, acreditamos que a pre- dominância de um argumento de ordem setorial nas tomadas de posição (especialmente dentro das

dois gestores, pelo fato deles serem os mais indicados para avaliarem administrativamente a articulação entre o ensino médio e a educação profissional, bem como a estruturação

No direito brasileiro, a transmissão da propriedade imóvel acima de determinado valor (art. 108 Código Civil brasileiro) exigirá documento elaborado exclusivamente pelo notário e