Access inicio | | | | | |
Olá,
Seja Bem Vindo ao Blog.

Conecte-se ou registre-se e utilize gratuitamente este equipamento, temos exemplos referente a criação de banco de dados e desenvolvimento de softwares e programas utilizando o Microsoft Access.


Administração do Blog AccessDoProgramador.

VBA, loop para copiar parte de string de uma coluna para outra

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

01092012

Mensagem 

VBA, loop para copiar parte de string de uma coluna para outra






Veja esta tabela:


Ela possui mais de 14 mil registros.

Eu precisei capturar apenas a letra que inicia o dado no campo Codigo e copiá-la para o campo (a coluna) chamado Letra.

Então olhando a imagem acima, verá que os dados na coluna Letra devem ficar assim:


E isso será possivel percorrendo os registros em um recordset, porque imagina fazer isso na mão um a um. Shocked

Ficará louco antes do fim. cyclops

Para solucionar isso escrevi o seguinte código:


Option Compare Database
'Usarei Option Explicit porque quero todas as variáveis declaradas
'Se houver alguma sem declarar dará erro

Option Explicit

Private Sub ComandoLoop_Click()

'Inicio o tratamento de erros
On Error GoTo TratareiErro

'Variável para referenciar o banco de dados
Dim Db As DAO.Database
'Variável para referenciar o conjunto de registros
Dim Rs As DAO.Recordset
'Variável que armazenará o n° total de registros a serem percorridos no loop
Dim Contador As Long
'Variável que armazenará a contagem de registros a cada passada do loop
Dim ContaOProgresso As Long
'Variável que receberá a letra que será capturada usando a função Left(Rs(Index),1)
Dim L As String

'Instancio o objeto banco de dados
Set Db = OpenDatabase(CurrentProject.Path & "\banco\Back-End.accdb")
'Instancio o recordset, ou seja, o conjunto de registros da tabela
Set Rs = Db.OpenRecordset("cid")

'Movimento no recordset até o ultimo registro para precisar o número de registros no recordset
Rs.MoveLast

'Alimento a variável Contador com o total de registros no conjunto de dados, que é o recordset
Contador = Rs.RecordCount

'Movo para o primeiro registro do recordset
Rs.MoveFirst

'Utilizo o SysCmd para executar uma barra de progresso para indicar a que pé encontrará o processamento.
SysCmd acSysCmdInitMeter, "Realizando as alterações, aguarde...", Contador

'Inicio o loop que irá do primeiro registro ao ultimo
'Veja que já sabemos a quantidade a ser percorrida na variável Contador

    For ContaOProgresso = 1 To Contador

    'Atualizo as informações da barra de progresso
    'Mostrará a evolução de 1 a cada valor passado do Contador

    SysCmd acSysCmdUpdateMeter, ContaOProgresso

    'Utilizo a função Left para capturar somente a letra no inicio da string e armazenar na variável L
    L = Left(Rs(0), 1)

    'Abro a edição na linha que estou passando
    Rs.Edit
    'Já com a letra capturada a insiro na coluna Letra
    Rs(2) = L
    'Atualizo o registro
    Rs.Update

    'E vou para o próximo
    Rs.MoveNext

    'Aqui acontece o loop, ou seja, retorno lá pra cima novamente
    'apartir do For ContaOProgresso eu faço mesmo procedimento que fiz na linha de registro anterior.

    Next ContaOProgresso


'Quando o For ContaOProgresso = 1 chegar ao total do Contador, o loop terá chegado ao seu final.
'Não resta mais nada a não ser fechar o recordset

Rs.Close
'E também o banco
Db.Close

'Removo a barra de progresso
SysCmd acSysCmdRemoveMeter

'E informo uma mensagem dizendo o número de registros percorridos
MsgBox "OK, Total de: " & Contador & " registros", vbInformation, "Concluído"


Exit_TratareiErro:
Exit Sub

'Se algo impedir o funcionamento do código, emite uma mensagem informando ao usuário qual o erro
TratareiErro:
MsgBox "Ocorreu uma falha neste processamento." _
      & vbCrLf & "Trata-se do erro n°: " & Err.Number _
      & vbCrLf & "Descrição: " & Err.Description, vbCritical, "Erro inesperado"


Exit Sub


End Sub



Download do exemplo:
Download

Até mais study


Última edição por Dilson em Ter 4 Abr 2017 - 22:35, editado 2 vez(es)


avatar
Dilson
Facilitador
Facilitador

Brasil


http://www.dadosweb.com

Voltar ao Topo Ir em baixo

- Tópicos similares
Compartilhar este artigo em: diggdeliciousredditstumbleuponslashdotyahoogooglelive

VBA, loop para copiar parte de string de uma coluna para outra :: Comentários

avatar

Mensagem em Ter 4 Dez 2012 - 15:30 por good guy

Muito Bom Dilson,

Uma boa aula sobre aplicações utilizando loopings em recordsets.

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum