Notifications
Clear all

Macro Excel - Importar TXT variado ; § #

7 Posts
3 Usuários
0 Reactions
3,711 Visualizações
(@viviannye)
Posts: 30
Trusted Member
Topic starter
 

Gostaria de Criar um botão em uma planilha que abra uma janela para eu escolher o arquivo txt e inicie a importação a partir da 5ª linha dessa mesma planilha do botão,
estou encontrando 2 problemas, o primeiro é q esse arquivo vem do banco diariamente, e varia separado por "; ou § ou #" e eu só estou conseguindo quando ele vem por ";"
o 2º problema é q eu quero q puxe do arquivo a partir da 2 linha pois tem cabeçalho no txt e está puxando da 1ª.

Segue o que tenho utilizado:

Sub Importar()
'
' Macro1 Macro
'
Dim s As String

s = AbrirArq
'
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & s, Destination:=Range( _
"$A$5"))
.Name = "AmazingDrumming"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub


Function AbrirArq()

Dim Caminho As String 'Caminho do arquivo
Dim fDialog As Office.FileDialog

'Configura caixa de seleção do arquivo
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
With fDialog
.AllowMultiSelect = False 'Habilita ou desabilita a seleção de múltiplos arquivos
.Title = "Selecionar arquivo..."
'.InitialFileName = 'Caminho inicial para seleção, não utilizado no exemplo

'Configura filtros da caixa de seleção
.Filters.Clear 'Limpa os filtros
.Filters.Add "Arquivos de Texto - .txt", "*.txt" 'Adiciona filtro para arquivos .xlsb

If .Show = True Then 'Se o parâmetro .Show for igual à True significa
'que algum arquivo foi selecionado
Caminho = .SelectedItems.Item(1) 'Local + arquivo selecionados são passados para
'a variável chamada de "Caminho"
Else
MsgBox "Você clicou em cancelar"
End If

End With

AbrirArq = Caminho 'Atribui o caminho do arquivo ao retorno da função

End Function

Desde já grata!

 
Postado : 15/10/2013 8:13 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Viviane, sómente à partir do codigo fica um tanto quanto dificil auxiia-la
Postagem tambem em http://info.abril.com.br/forum/viewtopi ... b57d3fd779 e http://info.abril.com.br/forum/viewtopi ... 85cb615ff6
Para alterar a linha da importação experimente alterar
De: .TextFileStartRow = 1
Para>.TextFileStartRow = 2
Para alterar o qualificado da importação, poderia ser
.TextFileParseType = xlDelimited 'Determina que o texto e delimitado
.TextFileTextQualifier = xlTextQualifierDoubleQuote 'Identifica o texto em aspas duplas
.TextFileConsecutiveDelimiter = False 'Determina se considera delimitaro duplo como unico
.TextFileTabDelimiter = False 'Determina se utiliza Tabulação como delimitador
.TextFileSemicolonDelimiter = True 'Determina se utiliza ponto e virgula como delimitador
.TextFileCommaDelimiter = False 'Determina se utiliza virgula como delimitador
.TextFileSpaceDelimiter = False 'Determina se utiliza Espaço como delimitador
.TextFileOtherDelimiter = "$" 'Determina a utilização de outros delimitadores, creio que sómente aceita um por vez

 
Postado : 15/10/2013 8:44 am
(@viviannye)
Posts: 30
Trusted Member
Topic starter
 

o/
Resolveu meu problema de iniciar pela 2 linha do arquivo txt
consegui agora importar tanto com "; ou #"
o problema que restou é q não estou conseguindo com § (não é o cifrão)

coloquei tanto o :

.TextFileSemicolonDelimiter = True 'Determina se utiliza ponto e virgula como delimitador
quanto o:
.TextFileOtherDelimiter = "#" 'Determina a utilização de outros delimitadores, creio que sómente aceita um por vez

queria colocar o outro mais ele não está aceitando =/

 
Postado : 15/10/2013 2:19 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Como "disse", a figura "OtherDElimiter" "atua" um por vez. Portanto para utilizar + de 1, se for em arquivos diferente, pode-se alterar o caracter para cada 1.
Porem o mais viavel e facil e utilizar a proposta do colega JValq (http://info.abril.com.br/forum/viewtopic.php?f=101&t=49907) que propoe a substituição/unificação dos caracteres .
Esta é a rotina proposta pelo colega JValq

    Sub Substituir()
        Dim Arquivo As String
        Dim Arquivo2 As String
        Dim Linha As String
       
        'Define o arquivo (original) a ser editado
        Arquivo = Application.GetOpenFilename
       
        'Define o local do arquivo editado. Pode ser alterado, caso queira que seja salvo em outro local.
        Arquivo2 = "D:TempArquivo2.txt"
       
        'Abre o arquivo que receberá os dados editados
        Open Arquivo2 For Output As #2
       
        'Abre o arquivo original
        Open Arquivo For Input As #1
       
        While Not EOF(1)
            Line Input #1, Linha
           
            'Substitui o caracter § por #
            Linha = Replace(Linha, "§", "#")
            Print #2, Linha
        Wend
        Close
        MsgBox "Fim de Execução da Macro"
    End Sub
 
Postado : 16/10/2013 5:28 am
(@araujors)
Posts: 79
Estimable Member
 

Reinaldo,

Seu código me ajudou muito no que eu precisa, minha pergunta é se tens como fazer isso dentro de um diretório em todos arquivos .txt, não apenas em um conforme o código acima.

Att,

 
Postado : 28/09/2017 2:25 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Sempre e necessário abrir/tratar um arquivo por vez, para diversos arquivos em um diretório pode dar um loop nos arquivos editando-os um a um
seria algo similar ao postado em viewtopic.php?f=10&t=7760&hilit=+varios e/ou viewtopic.php?f=10&t=7630&hilit=+varios

 
Postado : 28/09/2017 2:41 pm
(@araujors)
Posts: 79
Estimable Member
 

Amigão fiz o ajuste e esta funcionando parcialmente como eu quero, tipo preciso q ele feche o arquivo que ta lendo exemplo 1 e abra o outro salve e assim por diante exemplo 2, aqui no meu caso ta salvando por cima do mesmo.

Sub SubstituirTeste()
        Dim Arquivo As String
        Dim Arquivo2 As String
        Dim Linha As String
        Dim Pasta As String
        Dim tempo As String
        Dim ANome As String
        
        tempo = Format(Time, "hhmmss")
        
        'Atribui a pasta onde estão os arquivos
        Pasta = "C:teste"
        
        'Coloca na variável o nome do primeiro arquivo
        Arquivo = Dir(Pasta & "*.txt")
        
        Do While Arquivo <> ""
        
        'Inicia um laço para cópia dos arquivos
        ANome = Pasta & Arquivo
       
        'Le o arquivo sem abrilo
        Arquivo = FreeFile
        
'        Arquivo = CInt(Arquivo) + 1
       
        'Define o local do arquivo editado. Pode ser alterado, caso queira que seja salvo em outro local.
        Arquivo2 = "C:" & "GKO" & tempo & (".txt")
       
        'Abre o arquivo que receberá os dados editados
        Open Arquivo2 For Output As #2
       
        'Abre o arquivo original
        Open ANome For Input As #1
       
        While Not EOF(1)
            Line Input #1, Linha
           
            'Substitui o caracter § por #
'            Linha = Replace(Linha, "§", "#")
            Linha = Replace(Linha, "IGUACU", "IGUAÇU")
            Linha = Replace(Linha, "GONCALO", "GONÇALO")
            Print #2, Linha
        Wend
        Close
        
        'Coloca na variável o nome do próximo arquivo
Arquivo = Dir
Loop

        MsgBox "Fim de Execução da Macro"
    End Sub
 
Postado : 28/09/2017 6:46 pm