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

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

Voltar ao Topo


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