Ola, se voce delimitar o banco de dados com algum caractere fica bem simples...
estou anexando um exemplo, qualquer duvida da um toque.
Não tem como delimitar os campos no banco de dados, pois foram importados de um arquivo PDF, contendo ao todo quase 800 registros.
Ola, se voce delimitar o banco de dados com algum caractere fica bem simples...
estou anexando um exemplo, qualquer duvida da um toque.
Se for somente para ajustar os registros "desalinhados" essa rotina pode te ajudar.
Eu pensei no, mesmo, em ajustar um à um, porém acontece que os registros que não o campo PIS/PASEP os campos seguintes à este último acabam sendo mesclados, ou seja, DT Nascimento com a DT de Admissão e a DT de admissão com o Cargo.
Eu conseguir improvisar um código bem especifico pra resolver o problema dos dados que faltam o PIS/PASEP:
'Define o PIS_PASEP
InícioPIS_PASEP = Len(Matrícula) + Len(Nome) + Len(CPF) + 1 'Define o primeiro caractere para iniciar a contagem
PIS_PASEP = Mid(linhaArquivo, InícioPIS_PASEP, 16) 'Define o PIS_PASEP filtrado
If InStr(1, PIS_PASEP, "/") <> 0 Then
PIS_PASEP = ""
End If
Ficando assim o código:
Sub ImportarDados()
Dim Arquivo As String, linhaArquivo As String
Dim Matrícula, Nome, CPF, PIS_PASEP, Cargo, DTNascimento, DTAdmissão As String
On Error GoTo PróximaLinha
Arquivo = CaminhoArquivo.Caption
Open Arquivo For Input As #1
Line Input #1, linhaArquivo
Line Input #1, linhaArquivo
Do Until EOF(1)
Line Input #1, linhaArquivo
LinhaVálida = InStr(1, linhaArquivo, " ")
If LinhaVálida = 8 Then
Dim TotalDeLinhas
TotalDeLinhas = Worksheets("Banco de Dados").UsedRange.Rows.Count + 1
'#################### Define as variáveis ####################
'Define a Matrícula
Matrícula = Mid(linhaArquivo, 1, 7)
'Define o Nome
InícioNome = 1 'Define o primeiro caractere para iniciar a contagem
FimNome = "." 'Define o ultimo caractere para terminar a contagem
NomeBruto = InStr(InícioNome, linhaArquivo, FimNome) 'Define a posição do ultimo cactere
Nome = Mid(linhaArquivo, 8, NomeBruto - 12) 'Define o Nome filtrado
'Define o CPF
InícioCPF = Len(Matrícula) + Len(Nome) + 1 'Define o primeiro caractere para iniciar a contagem
CPF = Mid(linhaArquivo, InícioCPF, 15) 'Define o CPF filtrado
'Define o PIS_PASEP
InícioPIS_PASEP = Len(Matrícula) + Len(Nome) + Len(CPF) + 1 'Define o primeiro caractere para iniciar a contagem
PIS_PASEP = Mid(linhaArquivo, InícioPIS_PASEP, 16) 'Define o PIS_PASEP filtrado
If InStr(1, PIS_PASEP, "/") <> 0 Then
PIS_PASEP = ""
End If
'Define a Data de Nascimento
InícioNascimento = Len(Matrícula) + Len(Nome) + Len(CPF) + Len(PIS_PASEP) + 2 'Define o primeiro caractere para iniciar a contagem
DTNascimento = Mid(linhaArquivo, InícioNascimento, 10) 'Define o Nascimento filtrado
'Define a Data de Admissão
InícioAdmissão = Len(Matrícula) + Len(Nome) + Len(CPF) + Len(PIS_PASEP) + Len(DTNascimento) + 3 'Define o primeiro caractere para iniciar a contagem
DTAdmissão = Mid(linhaArquivo, InícioAdmissão, 10) 'Define a Admissão filtrado
'Define o Cargo
InícioCargo = Len(Matrícula) + Len(Nome) + Len(CPF) + Len(PIS_PASEP) + Len(DTNascimento) + Len(DTAdmissão) + 4 'Define o primeiro caractere para iniciar a contagem
Cargo = Mid(linhaArquivo, InícioCargo, Len(linhaArquivo)) 'Define o Cargo filtrado
'#################### Preenche a Tabela ####################
Dim rngCelula As Range
Worksheets("Banco de Dados").Cells(TotalDeLinhas, 1) = Trim(Matrícula) 'Matrícula
Worksheets("Banco de Dados").Cells(TotalDeLinhas, 2) = Trim(Nome) 'Nome
Worksheets("Banco de Dados").Cells(TotalDeLinhas, 3) = Trim(CPF) 'CPF
Worksheets("Banco de Dados").Cells(TotalDeLinhas, 4) = Trim(PIS_PASEP) 'PIS/PASEP
Worksheets("Banco de Dados").Cells(TotalDeLinhas, 5) = DTNascimento 'DTNascimento
For Each rngCelula In Worksheets("Banco de Dados").Cells(TotalDeLinhas, 5)
rngCelula.FormulaLocal = rngCelula.Value
Next rngCelula
Worksheets("Banco de Dados").Cells(TotalDeLinhas, 6) = DTAdmissão 'DTAdmissão
For Each rngCelula In Worksheets("Banco de Dados").Cells(TotalDeLinhas, 6)
rngCelula.FormulaLocal = rngCelula.Value
Next rngCelula
Worksheets("Banco de Dados").Cells(TotalDeLinhas, 7) = Trim(Cargo) 'Cargo
PróximaLinha: Resume Next
End If
Loop
Close #1
Worksheets("Banco de Dados").Columns("A:G").AutoFit
End Sub
Deixarei o tópico aberto ainda algum tempo, afim de que alguém possa, se é que é possível, resolver a questão de uma forma menos improvisada.
Postado : 12/10/2015 4:51 pm