Manipulando Strings no VBA (Replace, Mid e InStr)



Documentos relacionados
Manipulando Strings no VBA (Replace, Mid e InStr)

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

VETORES E MATRIZES. By Eduardo Vieira Machado (Good Guy)

Informática de Gestão 1º ano / 1º semestre Ano letivo: 2014/2015. Visual Basic VBA

Avançado. Visão geral do ambiente do VBA Retornar à planilha Excel

Manipulando Strings no VBA (Mid ou Replace?)

LÓGICA DE PROGRAMAÇÃO. Professor Celso Masotti

De novo, vamos começar pelas funções mais básicas, testá-las e depois usá-las em funções mais complexas.

DESENVOLVIMENTO DE SOFTWARE

INTRODUÇÃO À PROGRAMAÇÃO DO ACCESS BASIC

Visual Basic for Applications: # 1

APOSTILA DE VBA PARA EXCEL MARCOS DE BARROS OUTUBRO DE RISK MANAGEMENT

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

10. Acessando o Banco de Dados através do Visual Basic

ILP - Introdução à Linguagem de Programação. Plano de estudo: - Constantes e variáveis. - Atribuindo valores às variáveis.

Sub AcessaWeb(url, x) ' recebe uma url para pesquisar e devolve uma planilha ' Solicita a criação da planilha x

A p o s t i l a M i c r o s o f t A c c e s s 97

Laboratório de Programação I

Nesta aula serão apresentados alguns comandos de condição, repetição e gráficos.

Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006. PdP. Pesquisa e Desenvolvimento de Produtos

INTRODUÇÃO À LINGUAGEM C++

CONCEITOS BÁSICOS PARA A CONSTRUÇÃO DE ALGORITMOS PARA COMPUTADORES. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

2 Pesquisa de valores em uma lista de dados

Curso Capacitação da Ufms. Anexos Excel 2007

Capítulo 8. CICLOS. Tabela 8.1 Programa8a.f90.

Aula de JavaScript 05/03/10

Orientação a Objetos. Conceitos Iniciais Introdução a Linguagem Java. Gil Eduardo de Andrade

LINGUAGEM SQL PARA CONSULTAS EM MICROSOFT ACCESS

INF 1007 Programação II

Collections. Objecto Collection. Propriedades e métodos

Editor de Seção: Editor de Seção. Na página Irá aparecer a página do usuário:

CADERNOS DE INFORMÁTICA Nº 1. Fundamentos de Informática I - Word Sumário

Incluindo, atualizando e excluindo linhas nas tabelas

APOSTILA DE EXEMPLO (Esta é só uma reprodução parcial do conteúdo)

SIMULADOS & TUTORIAIS

Testando e Comparando Valores

Reconhecer alguns dos objectos VBA Automatizar bases de dados recorrendo à programação VBA e scripts SQL

IMPRESSÃO DE DADOS VARIÁVEIS usando Adobe InDesign e OpenOffice.org

MANUAL DE UTILIZAÇÃO DO SISTEMA HERMES

Conceitos básicos da linguagem C

Tuplas e Dicionários. Vanessa Braganholo vanessa@ic.uff.br

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos

Capítulo 12. SUB-ROTINAS

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Comandos de repetição while

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

Inserindo e Listando registros

Implementando uma Classe e Criando Objetos a partir dela

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela?

Tarefa Orientada 18 Procedimentos armazenados

FUNCTION ) RETURNS INTEGER AS $$ DECLARE

compreender a importância de cada estrutura de controle disponível na Linguagem C;

Capítulo 2. VARIÁVEIS DO TIPO INTEIRO

Analisando e comparando as funções do DBNavegator

1. FUNÇÕES NO EXCEL 2007

PROGRAMAÇÃO ORIENTADA A OBJETO EM PHP

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Neste tópico, abordaremos a funcionalidade de segurança fornecida com o SAP Business One.

Guia do Usuário. idocs Content Server v

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

Calculador de preços e prazos de encomendas

Introdução aos cálculos de datas

Mais configuração OptraImage

COINF. Roteiro de Treinamento 0800Net. Versões e Revisões deste Documento. Índice. 1. Nome do Projeto. 2. Roteiro. Roteiro Treinamento Solicitante

4 Criação de macros e introdução à linguagem VBA

Introdução aos critérios de consulta. Um critério é semelhante a uma fórmula é uma cadeia de caracteres que pode consistir em

1 Funções básicas de implementação de arquivos

Banco de Dados Microsoft Access: Criar tabelas. Vitor Valerio de Souza Campos

Sistemas Operacionais. Curso Técnico Integrado Profa: Michelle Nery

Estrutura de Dados Básica

Teclado. Mike McBride Anne-Marie Mahfouf Tradução: Lisiane Sztoltz

Capítulo 15. INICIALIZAÇÃO, TEMPO DE CPU E DOS

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

SEI Superintendência de Estudos Econômicos e Sociais da Bahia Av Luiz Viana Filho, 435-4ª avenida, 2º andar CAB CEP Salvador - Bahia Tel.

MANUAL DE PADRONIZAÇÃO DE CODIFICAÇÃO PHP CODING STANDARDS

Laboratório de Banco de Dados II Aula 1. Stored Procedures

Avançado. Visão geral do ambiente do VBA Retornar à planilha Excel

Usando o do-file editor Automatizando o Stata

Manual das planilhas de Obras v2.5

Especialização em web com interfaces ricas

JavaScript (ou JScript)

Bem-vindo ao tópico sobre administração de listas de preços.

Banco de Dados. Marcio de Carvalho Victorino Exercícios SQL

Trabalho 3: Agenda de Tarefas

Projeto de Banco de Dados

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

Neste capítulo, vamos utilizar as funções de API para o serviço de FTP, que permitirá o acesso a uma máquina remota para enviar arquivos.

INSTRUÇÕES DE INSTALAÇÃO

Banco de Dados Microsoft Access: Criar tabelas

Algoritmos e Programação

Curso de Iniciação ao Access Basic (I) CONTEÚDOS

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

COMO PROGRAMAR SEU TIME

TUTORIAL DO ASSISTENTE VIRTUAL (QUICK START)

- Aulas 57, 58, 59 e 60 - Técnicas de programação. Funções

Configurando o Controle dos Pais no Windows Vista

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Passo-a-passo Oi Torpedo Empresa

Transcrição:

Manipulando Strings no VBA (Replace, Mid e InStr) por Eduardo Vieira Machado (Good Guy) Hoje gostaria de tratar de um assunto bastante atraente no Access e que é muito trabalhado nas empresas - a manipulação de strings. Entenda manipular como saber trabalhar com os caracteres que a formam, localizar um caracter, substituí-lo por outro, recortar parte de uma string à direita ou à esquerda dela, concatenar strings, etc. Para isso seria importante conhecer bem as funções do Access que nos possibilitam alcançar este objetivo. A princípio, começaremos com uma função bem conhecida chamada Replace: (1) Uso da Função Replace: O Ajuda do Access destaca o seguinte: Descrição Retorna uma seqüência de caracteres em que uma subseqüência de caracteres especificada foi substituída por outra subseqüência de caracteres uma quantidade de vezes especificada. Sintaxe Replace(expression, find, replace[, start[, count[, compare]]]) A sintaxe da função Replace tem os seguintes argumentos nomeados: Parte Expression(expressão) Find (procura) Replace(substitui) Start(inicia) Descrição Obrigatória. A expressão de seqüência contendo a subseqüência de caracteres a ser substituída. Obrigatória. A subseqüência de caracteres que está sendo procurada. Obrigatória. A subseqüência de caracteres de substituição. Opcional. A posição dentro de expression onde a pesquisa da subseqüência de caracteres deve iniciar. Se

for omitido, será assumido o valor 1. Count(conta) Compare(compara) Opcional. A quantidade de substituições de subseqüências de caracteres a ser efetuada. Se for omitida, o valor padrão será 1, o que significa que todas as substituições possíveis devem ser efetuadas. Opcional. O valor numérico que indica o tipo de comparação a ser usado ao avaliar subseqüências de caracteres. Consulte a seção Configurações para obter os valores. Definições O argumento compare pode ter os seguintes valores: Constante Valor Descrição VbUseCompareOption 1 Executa uma comparação usando a configuração da instrução Option Compare. VbBinaryCompare 0 Executa uma comparação binária. VbTextCompare 1 Executa uma comparação textual. VbDatabaseCompare 2 Somente Microsoft Access. Efetua uma comparação, com base nas informações existentes no banco de dados. Valores retornados Replace retorna os seguintes valores: Se Replace retornará expression tiver comprimento zero Seqüência de caracteres de comprimento zero ("") expression for Null Um erro.

find tiver comprimento zero replace tiver comprimento zero start > Len(expression) count for 0 Cópia de expression. Cópia de expression com todas as ocorrências de find removidas. Seqüência de caracteres de comprimento zero. Cópia de expression. Comentários O valor de retorno da função Replace é uma seqüência de caracteres, com substituições efetuadas, que inicia na posição especificada por start e termina no final da seqüência de caracteres expression. Não é uma cópia da seqüência de caracteres original do início ao fim. Exemplo Prático (1): Desenvolvi este exemplo para finalidade de estudo. Crie um formulário com uma caixa de texto (Endereco) não acoplada e no ambiente de código, coloque esta função: 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 setr = Replace(Endereco, "Estrada", "Etr") 'Expression(ou nome do campo), 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 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 Exemplo Prático(2) Utilizando a função Replace em consultas Atualização: (a) Consulta simples No modo SQL de sua consulta digite o seguinte: UPDATE SuaTabela SET Endereco = Replace(Endereco,"Avenida","Avn"); Através de uma consulta atualização fica mais fácil de uma vez só alterar todos os registros trocando Avenida por Avn, Estrada por Etr e outros símbolos. (b) Consulta Atualização múltipla No modo SQL de sua consulta digite o seguinte: UPDATE SuaTabela SET Endereco = replace(replace(replace(replace(endereco,"estrada","etr"),"rua","r"),"avenida","avn"),"/","-"); (*) (2) Uso da Função Mid: O Ajuda do Access fornece a seguinte descrição: Retorna um Variant (String) contendo um número especificado de caracteres de uma seqüência. Sintaxe Mid(seqüência, início [, comprimento ] )

A sintaxe da função Mid tem os seguintes argumentos: Argumento seqüência início comprimento Descrição Obrigatório. ">Expressão em seqüência a partir da qual os caracteres são retornados. Se seqüência contiver Null, Null será retornado. Obrigatório. Long. Posição do caractere no argumento seqüência no qual a parte a ser tomada começa. Se início for maior do que o número de caracteres em seqüência, Mid retornará uma seqüência de comprimento nulo (""). Opcional. Variant (Long). Número de caracteres a serem retornados. Se omitido ou se houver menos caracteres no texto do que o número definido em comprimento (incluindo o caractere em início), todos os caracteres desde a posição início até o final da seqüência serão retornados. Comentários Para determinar o número de caracteres em seqüência, use a função Len. OBSERVAÇÃO Use a função MidB com dados byte contidos em uma seqüência, como em linguagens de conjunto de caracteres de byte-duplo. Em vez de especificar o número de caracteres, os argumentos especificam os números de bytes. Para o código de exemplo que usa MidB, consulte o segundo exemplo no tópico Exemplo. Exemplo Prático (1): Vou manter o exemplo do Ajuda do Access como instrução preliminar, mas com algumas modificações. Em um formulário vazio coloque um botão (cmdfuncao) e no ambiente de código a seguinte a função: Public Function MeuMid() Dim MinhaString, PrimeiraPalavra, UltimaPalavra, MeiaPalavra As String MinhaString = "Como trabalhar com Strings" ' Crie uma string.

PrimeiraPalavra = Mid(MinhaString, 1, 4) ' Returns "Como". UltimaPalavra = Mid(MinhaString, 20, 7) ' Returns "Strings". MeiaPalavra = Mid(MinhaString, 5) ' Returns "trabalhar com Strings". MsgBox "Essa é a string inicial: '" & MinhaString & "'" MsgBox "Mid(MinhaString,1,4). A partir do 1º caracter retorna a primeira palavra: '" & PrimeiraPalavra & "'" MsgBox "Mid(MinhaString, 20, 7). A partir do 20º caracter retorna a última palavra: '" & UltimaPalavra & "'" MsgBox "Mid(MinhaString, 5). A partir do 5º caracter retorna as palavras do meio '" & MeiaPalavra & "'" End Function Private Sub cmdfuncao_click() Call MeuMid End Sub Exemplo Prático (2): Você pode utilizar a função Mid para localizar um caracter em uma string e compará-la com uma letra fazendo uso de Select Case ou If...Then: Desenvolvi esta função para este segundo exemplo. Em um formulário vazio coloque uma caixa de texto não acoplada(txtcomparacao) e um botão(cmdcomparar).

Public Function ComparaCaracter() Dim i As Integer Dim Resultado As String i = InputBox("Digite a posição da letra da palavra:", Comparação de Caracteres ) Resultado = Mid(txtComparacao, i, 1) 'Pesquisa uma letra a partir da ordem numérica digitada na InputBox If Resultado = "A" Then MsgBox "A letra A significa Alfa" ElseIf Resultado = "B" Then MsgBox "A letra B significa Beta" Else MsgBox "Letra desconhecida" End If End Function Private Sub cmdcomparar_click() Call ComparaCaracter End Sub Faça alguns testes para verificar essa nova possibilidade. Estude um programa que criei chamado Identificador de Numeração de Peças e crie seu próprio programa para outras finalidades usando a sua criatividade. Exemplo Prático (3)

Um usuário do fórum solicitou ajudar para um código que se incluísse somente os três primeiros caracteres do nome do produto em uma determinada tabela. O código ficou assim: Private Sub cmdincluir_click() On Error Resume Next Dim a As String Dim b As String Dim strsql As String a = InputBox("Digite o nome do produto: ") b = Mid(b, 1, 3) MsgBox b strsql = "INSERT INTO tblteste(produto) VALUES('" & b &"')" Variáveis do tipo String você usa o apóstrofo mais as aspas duplas para delimita-la. DoCmd.RunSQL strsql End Sub (3) Uso da Função InStr: O Ajuda do Access fornece a seguinte descrição: Retorna uma Variant (Long) que especifica a posição da primeira ocorrência de uma seqüência de caracteres dentro de outra. Sintaxe InStr([start, ]string1, string2[, compare])

A sintaxe da função InStr tem os seguintes argumentos: Parte start string1 string2 compare Descrição Opcional. Expressão numérica que define a posição inicial de cada pesquisa. Se omitido, a pesquisa iniciará na posição do primeiro caractere. Se start contiver Null, ocorrerá um erro. O argumento start será necessário, se compare for especificado. Obrigatória. Expressão de seqüência sendo pesquisada. Obrigatória. Expressão de seqüência de caracteres procurada. Opcional. Especifica o tipo de comparação de seqüência de caracteres. Se compare for Null, ocorrerá um erro. Se compare for omitido, a configuração Option Compare determinará o tipo de comparação. Especifique um LCID (LocaleID) válido para usar regras específicas da localidade na comparação. Definições As configurações do argumento compare são as seguintes: Constante Valor Descrição vbusecompareoption -1 Executa uma comparação usando a configuração da instrução Option Compare. vbbinarycompare 0 Executa uma comparação binária. vbtextcompare 1 Executa uma comparação textual. vbdatabasecompare 2 Somente Microsoft Access. Efetua uma comparação, com base nas informações existentes no banco de dados.

Valores retornados Se A InStr retornará string1 tiver comprimento zero 0 string1 for Null string2 tiver comprimento zero string2 for Null Null start Null string2 não for encontrado 0 string2 for encontrado dentro de string1 A posição em que a correspondência foi encontrada start > string2 0 Comentários A função InStrB é usada com os dados de bytes contidos em uma seqüência de caracteres. Em vez de retornar a posição de caractere da primeira ocorrência de uma seqüência de caracteres dentro de outra, InStrB retorna a posição de byte. Exemplo Prático (1): Desenvolvi a seguinte sub-rotina abaixo para um determinado programa com o fim de deletar a numeração de uma rua a partir de uma vírgula do endereço. O que eu precisava fazer era localizar a vírgula primeiro com a função InStr e depois deletar a string à sua esquerda. Em um formulário vazio, coloque uma caixa de texto não acoplada(endereco). 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 de sua caixa de texto coloque o seguinte código: 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 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 Exemplo Prático(2):

No código abaixo vamos aplicar este conhecimento desta função de uma outra forma agora, localizando o símbolo em um endereço de email, caso os símbolos tal como @ (arroba)e., se não estiverem presentes, não será possível reconhecer o email como válido. Com a mesma caixa de texto (Endereco) teste a sub-rotina no evento Antes de Atualizar: Private Sub Email_BeforeUpdate(Cancel As Integer) On Error Resume Next Dim var As String var = InStr(1, [Email], "@") If var = 0 Then ' Não é e-mail, já que não contém @. Não aceita sem o arroba é verdade, mas aceita se digitar até aí. MsgBox "Email inválido. Por favor, digitar um email válido que contenha o símbolo '@'(arroba)!", vbcritical, "Email?" With Me.Senha.Enabled = False.txtConfirmação.Enabled = False.Lembrete.Enabled = False End With ElseIf Len(Me!Email) < 10 Then 'Não aceita se for uma string menor que dez caracteres. Resolve o problema anterior. MsgBox "Email inválido. Por favor, digitar um email completo e válido!", vbcritical, "Email?" With Me

.Senha.Enabled = False.txtConfirmação.Enabled = False.Lembrete.Enabled = False End With ElseIf InStr(1, Email, "@", 1) < 2 Then ' Não aceita email que no início só tenha dois caracteres ou menos MsgBox "Email inválido!", vbcritical, "Email?", vbcritical, "Email?" With Me.Senha.Enabled = False.txtConfirmação.Enabled = False.Lembrete.Enabled = False End With ElseIf IsNull(Me!Email) Then ' Não aceita o campo em branco MsgBox "Email inválido. Por favor, não deixe o campo em branco. Digite um email válido!", vbcritical, "Email?" With Me.Senha.Enabled = False.txtConfirmação.Enabled = False.Lembrete.Enabled = False End With

Else MsgBox "Email válido!aguarde para verificar se já existe este email cadastrado...", vbinformation, "Email" 'Valida um email que cumpra todos os requisitos acima With Me.Senha.Enabled = True.txtConfirmação.Enabled = True.Lembrete.Enabled = True End With End If End Sub Estude o código completo na aplicação Cadastro de Usuários e Login no Sistema neste site http://www.svcsoftwarehouse.com Agradecimentos: (*) Agradeço ao mestre João Paulo do Máximo Access por esta instrução aprimorada da função Replace em um dos seus exemplos no fórum ExpertAccess