Notifications
Clear all

Importar arquivos de texto para o EXCEL

9 Posts
1 Usuários
0 Reactions
2,341 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Prezados,

Primeiramente gostaria de dizer que gostei muito do site (estou começando hoje), espero aprender muito aqui.

Bom, minha dúvida é a seguinte:

Gostaria de importar arquivos de texto presentes em um site (aqui está um link: http://www.liffe.com/data/dcfs110601.txt )

A princípio seria muito fácil, iria lá na importação de dados colocaria o endereço e o excel me retorna os dados com sucesso. Contudo, eu gostaria que o link em questão mudasse automaticamente.

Essa última parte do texto "110601.txt" refere-se ao dia 01/06/2011, logo, por exemplo, eu conseguiria montar em uma célula do excel, com funções de texto, o endereço do arquivo referente a outro dia.

1º como posso importar esses dados com vba ?

2º como posso fazer com que a programação (a macro) pegue o endereço do link em uma célula do excel (A1 por exemplo)?

Ficaria imensamente grato se puderem me ajudar.

Um abraço, pessoal.

 
Postado : 02/07/2011 3:58 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Na gambiarra usando ESQUERDA E DIREITA nas células ocultas.

Está aí!

 
Postado : 02/07/2011 5:38 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Na gambiarra usando ESQUERDA E DIREITA nas células ocultas.

Está aí!

Valeu...mas fico no aguardo da parte em VBA.

 
Postado : 02/07/2011 8:33 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 


Veja se desta forma atende, digitando apenas a data em A1:


Sub Macro1()

d = Day(Range("A1"))
m = Month(Range("A1"))
y = Right(Year(Range("A1")), 2)

If Len(d) = 1 Then
d = "0" & d
End If

If Len(m) = 1 Then
m = "0" & m
End If

With ActiveSheet.QueryTables.Add(Connection:="URL; http://www.liffe.com/data/dcfs" & y & m & d & ".txt", Destination:=Range("A2"))
.Name = "dcfs" & y & m & d
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub

 
Postado : 02/07/2011 10:15 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 


Veja se desta forma atende, digitando apenas a data em A1:


Sub Macro1()

d = Day(Range("A1"))
m = Month(Range("A1"))
y = Right(Year(Range("A1")), 2)

If Len(d) = 1 Then
d = "0" & d
End If

If Len(m) = 1 Then
m = "0" & m
End If

With ActiveSheet.QueryTables.Add(Connection:="URL; http://www.liffe.com/data/dcfs" & y & m & d & ".txt", Destination:=Range("A2"))
.Name = "dcfs" & y & m & d
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub

Edson, meu caro, funcionou perfeitamente. Estou muito contente por ter ingressado no site.
Muito Obrigado.

Se não for pedir muito, gostaria de saber como posso solucionar três probleminhas. Não são graves, mas acredito que você possa saber contorná-los.

1º Quando eu insiro uma data não válida, como um sábado (25/06/2011), ou um dia em que é feriado, ele retorna uma msgbox de erro. Gostaria que não retornasse tal erro e sim, apenas, 0 ou "".

2º quando mudo a data e executo a data novamente, o excel insere uma nova coluna com os dados.
Gostaria que o excel substitui-se os dados existentes (da última data pesquisada) pelos dados da nova data.

3º Há como fazer com que o excel separe os dados com tabulação (TAB) para diferentes colunas. Consigo fazer isso com esquerda e direita, mas há uma maneira mais fácil com macros.

Mas são só detalhes. De resto meu xapa, só tenho a agradecê-lo. Valeu.

Um abraço

 
Postado : 03/07/2011 10:31 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 


Alterações para 1º e 2º abaixo.
Para a questão da tabulação, não identifiquei uma rotina na estrutura... para que os dados sejam listados nas colunas corretas... se souber esclarecer...

Sub Macro1()

Application.DisplayAlerts = False

Range("A2:IV65536").ClearContents

Application.DisplayAlerts = True

d = Day(Range("A1"))
m = Month(Range("A1"))
y = Right(Year(Range("A1")), 2)

If Len(d) = 1 Then
d = "0" & d
End If

If Len(m) = 1 Then
m = "0" & m
End If

On Error GoTo ErroData
With ActiveSheet.QueryTables.Add(Connection:="URL; http://www.liffe.com/data/dcfs" & y & m & d & ".txt", Destination:=Range("A2"))
.Name = "dcfs" & y & m & d
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With

Exit Sub

ErroData:
MsgBox "Data indisponível."
Exit Sub

End Sub

 
Postado : 03/07/2011 3:34 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 


Alterações para 1º e 2º abaixo.
Para a questão da tabulação, não identifiquei uma rotina na estrutura... para que os dados sejam listados nas colunas corretas... se souber esclarecer...

Sub Macro1()

Application.DisplayAlerts = False

Range("A2:IV65536").ClearContents

Application.DisplayAlerts = True

d = Day(Range("A1"))
m = Month(Range("A1"))
y = Right(Year(Range("A1")), 2)

If Len(d) = 1 Then
d = "0" & d
End If

If Len(m) = 1 Then
m = "0" & m
End If

On Error GoTo ErroData
With ActiveSheet.QueryTables.Add(Connection:="URL; http://www.liffe.com/data/dcfs" & y & m & d & ".txt", Destination:=Range("A2"))
.Name = "dcfs" & y & m & d
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With

Exit Sub

ErroData:
MsgBox "Data indisponível."
Exit Sub

End Sub

Parceiro, agora ta perfeito! Acertei umas funções de esquerda e direita para a tabulação!
Está do jeito que eu queria ...sem tirar nem por. E de um jeito que eu jamais conseguiria sem sua ajuda.

Agora me restam duas perguntas:

1º Onde vc aprendeu VBA desse jeito ? Curso? Sozinho? A quanto tempo trabalha com programação em VBA?

2º Como faço para encerrar esse tópico? Preciso escolher a melhor resposta ou coisa assim?

 
Postado : 03/07/2011 4:54 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

lostruler, aqui não encerramos o tópico pois caso alguém queira aproveitar o tópico que poste aqui (desde que a primeira dúvida esteja encerrada, senão é só criar outro tópico).

E também não precisa escolher a melhor resposta não... Somente um agradecimento e falar se deu certo ou não a solução...

de resto, fique a vontade...

Qualquer coisa da o grito...

 
Postado : 04/07/2011 6:12 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

lostruler, aqui não encerramos o tópico pois caso alguém queira aproveitar o tópico que poste aqui (desde que a primeira dúvida esteja encerrada, senão é só criar outro tópico).

E também não precisa escolher a melhor resposta não... Somente um agradecimento e falar se deu certo ou não a solução...

de resto, fique a vontade...

Qualquer coisa da o grito...

Aaaa...valeu pelo esclarecimento.

Um abraço

 
Postado : 04/07/2011 11:57 am