Notifications
Clear all

Macro para importação de dados

13 Posts
4 Usuários
0 Reactions
5,397 Visualizações
(@jow_rj)
Posts: 16
Active Member
Topic starter
 

Fala galera, blz? Preciso da ajuda de vocês em umas atuações com macros.

Tenho uma planilha, onde todos dia faço importação de dados, faço todo dia pois os dados são gerados de acordo com o dia, então existe um arquivo csv para o dia 20, outro para o dia 21 outro para o dia 22 e por aí vai....
Faço esse processo manualmente, indo lá na importação de dados, informando a linha onde os dados devem ser importados, etc.

Porém agora, estou mexendo com as macros e gravei uma macro para fazer esse processo e ficou perfeito. Executo a macro e ela importa os dados do arquivo, porém, tem um detalhe:
Como falei, faço importação todos os dias, quando eu executo a macro, obviamente o Excel sobrescreve, por exemplo, os dados do dia 21, com os dados do dia 22....
O que eu preciso é incluir no código da macro, uma informação que fale para o Excel importar os dados na primeira linha vazia existente. Assim, ficaria na sequência normal, dia 21, dia 22, dia 23 e por aí vai.
Como posso fazer isso?

E outro detalhe que seria legal, a macro gravada, já puxa o arquivo informado. Gostaria de saber como faço, para ao executar a macro o Excel pergunte qual é e onde está o arquivo que eu desejo importar. Assim eu poderia gerar um arquivo para cada dia, sem precisar repetir o nome.

Obrigado galera!

abs!

Para ajudar, segue o código atual:

Sheets("IXXXXX").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;D:Documents and SettingsXXXXDesktoptestemaio.csv", Destination:= _
Range("A2"))
.Name = "maio"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 2
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub

 
Postado : 02/05/2012 1:03 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Altere as primeiras linhas de sua macro conforme abaixo, e veja se lhe atende:
'Abre o objeto para selecionar arquivo e "pega o nome e caminho"
oArq = Application.GetOpenFilename(FileFilter:="csv files(*.csv),*.csv")
'Verifica qual a ultima linha preenchida
lrow = Sheets("IXXXXX").Cells(Cells.Rows.Count, "A").End(xlUp).Row
Sheets("IXXXXX").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & oArq, Destination:= _
Range("A" & lrow + 1))

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 02/05/2012 2:18 pm
(@jow_rj)
Posts: 16
Active Member
Topic starter
 

Excelente meu camarada. Deu certinho.
Obrigado!

abs!

 
Postado : 04/05/2012 8:55 am
(@jow_rj)
Posts: 16
Active Member
Topic starter
 

Amigos, a primeira dúvida foi brilhantemente solucionada pelo meu camarada Reinaldo.
Mexendo agora na planilha, surgiram mais duas dúvidas legais que gostaria de saber....Imaginei que o melhor seria reabrir o tópico ao invés de criar outro novo e encher o fórum...
Caso eu esteja errado, me corrijam...
Na macro abaixo, ela abre para mim a janela de localização de arquivos:
Dúvida 01: Tem como eu setar já um local específico, para quando eu rodar a macro ir direto para esta pasta, ao invés de abrir no caminho tradicional do Windows?
Dúvida 02: Os arquivos que eu importo, são gerados por dia, com dados do dia anterior, que já está fechado, ou seja, hoje eu gerei um arquivo nomeado: 04_05 (sábado e domingo não contam).... AI amanhã vou gerar um arquivo: 07_05 e assim vai....Levando em consideração isso, tem como a importação ser automática?
Exemplo: quando eu clicar no botão com a macro, ele automaticamente vai procurar na pasta especificada, o arquivo com a data do dia atual, -1 e importar....
Fui claro?

obrigado!!!

 
Postado : 07/05/2012 8:51 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente assim

Sub importar()
Dim Dia As String, Mes As String, oArq As String, lRow As Long
Sheets("IXXXXX").Select
If Len(Month(Date)) = 1 Then
    Mes = "0" & Month(Date)
Else
    Mes = Month(Date)
End If
If Weekday(Date) = 2 Then
    If Len(Day(Date) - 3) = 1 Then
        Dia = "0" & Day(Date) - 3
    Else
        Dia = Day(Date) - 3
    End If
Else
    If Len(Day(Date) - 1) = 1 Then
        Dia = "0" & Day(Date) - 1
    Else
        Dia = Day(Date) - 1
    End If
End If

oArq = "D:Documents and SettingsXXXXDesktopteste" & Dia & "_" & Mes & ".csv"

lRow = Sheets("IXXXXX").Cells(Cells.Rows.Count, "A").End(xlUp).Row
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;D:Documents and SettingsXXXXDesktoptestemaio.csv", Destination:= _
Range("A" & lRow + 1))
.Name = "maio"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 2
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 07/05/2012 9:48 am
(@jow_rj)
Posts: 16
Active Member
Topic starter
 

Amigo, fiquei confuso pois postei duas dúvidas....Esse código, remete a primeira dúvida ou a segunda.? Pois a segunda dúvida, sendo esclarecida, não preciso nem da primeira...Só a título de conhecimento e curiosidade mesmo...

 
Postado : 07/05/2012 10:09 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Creio que remete às duas:

A variavel oArq tem o local "oArq = "D:Documents and SettingsXXXXDesktopteste" e tambem o nome do arquivo & Dia & "_" & Mes & ".csv"
Onde dia é o dia atual menos 1 ou 3 dias (se for segunda) e mes e o mes corrente.
Em tempo a linha de importação fica:
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & oArq, Destination:= _
Range("A" & lrow + 1))

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 07/05/2012 11:00 am
(@jow_rj)
Posts: 16
Active Member
Topic starter
 

Não rodou...vamos tentar por partes....

na primeira ajuda, o início da macro ficou assim:

'Abre o objeto para selecionar arquivo e "pega o nome e caminho"
oArq = Application.GetOpenFilename(FileFilter:="csv files(*.csv),*.csv")

Então ela abre, pedindo já arquivos *.csv.
Como faço para abrir em um local default...qualquer lugar: c:windows ; c:temp, etc....

 
Postado : 08/05/2012 2:15 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ok, façamos como Jack.
Primeiro:
Se o objetivo e utilizar o "Getopenfilename" em um diretorio especifico,
Não dá diretamente, mas pode ser utilizado uma pequena manobra
Primeiro altera-se o drive de trabalho (se necessario) ..ChDrive ("C")
Depois altera-se o diretorio de trabalho para o desejado ....ChDir ("C:Temp")
Maiores detalhes veja no topico http://www.tek-tips.com/faqs.cfm?fid=4114 .
Segundo:
Se o objetivo é abrir o arquivo "csv" ja em um diretorio e nome especificos
Sem necessidade de abrir a tela do "getopen..."; o codigo que postei anteriomente faz isso
Utilize a rotina completa abaixo(substitua a anterior) e veja o resultado

    Sub importar()
    Dim Dia As String, Mes As String, oArq As String, lRow As Long
    Sheets("IXXXXX").Select
 'Determina o mes e dia para compor o nome do arquivo  
 If Len(Month(Date)) = 1 Then
        Mes = "0" & Month(Date)
    Else
        Mes = Month(Date)
    End If
    If Weekday(Date) = 2 Then
        If Len(Day(Date) - 3) = 1 Then
            Dia = "0" & Day(Date) - 3
        Else
            Dia = Day(Date) - 3
        End If
    Else
        If Len(Day(Date) - 1) = 1 Then
            Dia = "0" & Day(Date) - 1
        Else
            Dia = Day(Date) - 1
        End If
    End If
'Determina o caminho e nome do arquivo
    oArq = "D:Documents and SettingsXXXXDesktopteste" & Dia & "_" & Mes & ".csv"

    lRow = Sheets("IXXXXX").Cells(Cells.Rows.Count, "A").End(xlUp).Row
    With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;oArq", Destination:= _
    Range("A" & lRow + 1))
    .Name = "maio"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 1252
    .TextFileStartRow = 2
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
    End With

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 08/05/2012 5:01 pm
(@jow_rj)
Posts: 16
Active Member
Topic starter
 

A rotina não apresenta erro, mas também não importa. Os arquivos estão lá normalmente. Ela não critíca falta de arquivo nem nada...
Os arquivos estão no formato DD_MM.csv
Estando em qualquer sheet, ao executar a macro, pula-se para a sheet, Incidentes....mas não faz nada....

 
Postado : 09/05/2012 6:37 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Well Jow_rj,
Não sei o que é a sheet incidentes, já que não foi mendionada,
mas comentando a rotina:
A Primeira linha posicona-se na planilha "IXXXXX"
Os dois primeiros if's (Mes e Dia) tem por objetivo formatar o dia para DD e mes para MM, exemplo ontem dia 8 acrescenta "0" e concatena como 8, retornando "08" então teriamos "08" e "05"
A linha onde se encontra oArq, determina o caminho "D...." e o nome do arquivo
Revisando a rotina que postei encontrei um erro de minha parte ( :o :mrgreen:) faltou um Apostrofe e "&" na linha de importação, creio que e por isso não esta "rodando" a linha de importação deve ficar :
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & oArq, Destination:= _

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 09/05/2012 7:50 am
(@jrm3107)
Posts: 1
New Member
 

Gente boa tarde.
Sou novo no forum e gostaria de saber se podem me ajudar.
Preciso importar informações de uma tabela HTML e gravar o EXCEL, porem são varias paginas, dai por macro eu consigo a primeira, mais as demais não funcionam...segue codigo fonte abaixo

Sub extracao01()
'
' extracao01 Macro
'

'

With ActiveSheet.QueryTables.Add(Connection:= _
"URL; http://www.cieesp.org.br/intranet/hotsites/forcadeatendimento/sistemas/buscafilialcont.asp?REGINICIO=1&SITUACAO=GERAL&ATIVIDADE=GERAL&SEGMENTO=GERAL&CONTATO=214&ORDENACAO=C&cepde=&cepate=&servico=GERAL" _
, Destination:=Range("$A$1"))
.Name = _
"buscafilialcont.asp?REGINICIO=1&SITUACAO=GERAL&ATIVIDADE=GERAL&SEGMENTO=GERAL&CONTATO=214&ORDENACAO=C&cepde=&cepate=&servico=GERAL"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "2"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub

 
Postado : 23/11/2017 4:09 pm
(@andremene)
Posts: 3
New Member
 

Boa Tarte a Todos!!!!

O tópico me serviu muito, porém tenho uma dúvida. Há alguma maneira de colocar uma linha para ele importar sempre a mesma coluna ou todo o arquivo como formato de texto? Eu importo diariamente arquivos com chaves de acesso de notas fiscais e gostaria que a coluna "chave de acesso" (que fica sempre no mesmo lugar) ou então todo o arquivo viesse com a formatação para texto. Outra dúvida, como adicionar um comando para logo após a importação a macro excluir o arquivo que foi importado deixando assim a pasta em branco?

desde já agradeço.

 
Postado : 27/08/2018 10:10 am