Página 1 de 1

Importar TXT com delimitador.

Enviado: Seg Set 30, 2019 4:05 pm
por Tov Elen Shau
Pessoal

Boa tarde

Preciso de um help
Venho importando arquivos txt Delimitados por um | “paper” por uma rotina que busca em uma pasta um arquivo com um nome prefixado. Gostaria de alterar a rotina para que fosse possível chamar a pasta Localizar e se o arquivo fosse selecionado a rotina abaixo fosse executada. Alguém já tem essa rotina pronta ou consegue me ajudar com isso? O problema é que quando chega em .Name = Var1 da erro.
With Caminhox
.Name = Var1
.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 = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = "|"
.TextFileColumnDataTypes = Array(1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With

Re: Importar TXT com delimitador.

Enviado: Seg Set 30, 2019 5:09 pm
por Julio Mangilli
Olá amigo,

Eu tenho certeza que não consigo ajudar, uauhauhauhauahuahaua mas vou tentar e colocar algo aqui que as vezes desperta alguma ideia, você já é fera no assunto então.

E se uma função conseguisse verificar se o arquivo existe e dali mandasse rodar a macro ?

Function Arquivo_Existe(rng As Range) As Boolean
' **** funcao que verifica se arquivo existe sem informar a extensao Por Basole ****
Dim file As String, fileName As String
fileName = rng.Value & ".*"
file = Dir(fileName)

If file = "" Then
Arquivo_Existe = False

Else
Arquivo_Existe = True

End If
End Function

Ai se existir dentro da pasta manda buscar pelo próprio link.

Espero poder ajudar, abraço.

Re: Importar TXT com delimitador.

Enviado: Seg Set 30, 2019 7:06 pm
por Reinaldo
Tov, como estão definidos Caminhox e Var1?
Onde é atribuido esses valores
Uma maneira de importar

Código: Selecionar todos

Sub Macro1()
  Dim sPath As String
  Dim fName As String
  Dim s As String
  s = CurDir
  'mudar para onde deseja que o diálogo seja apontado
  'para quando ele é exibido
  sPath = "C:\Seu dirtorio\Seus arquivos"
  ChDrive sPath
  ChDir sPath
  fName = Application.GetOpenFilename( _
   Filefilter:="CSV Files (*.CSV),*.CSV")
  ChDrive s
  ChDir s
  If LCase(fName) = "false" Then Exit Sub
  With ActiveSheet.QueryTables.Add _
     (Connection:="TEXT;" & fName, _
      Destination:=Range("A1"))
      .Name = Replace(LCase(fName), ".xls", "")
      .TextFileSemicolonDelimiter = True
      .TextFileCommaDelimiter = False
      .TextFileSpaceDelimiter = False
      .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
      .TextFileTrailingMinusNumbers = True
      .Refresh BackgroundQuery:=False
  End With
End Sub

Re: Importar TXT com delimitador.

Enviado: Qui Out 17, 2019 4:37 pm
por Tov Elen Shau
Boa tarde pessoal, desculpa a demora no feedback, somente hoje pude adaptar a rotina. Julio Mangilli, fiz exatamente o que você sugeriu. Primeiro uma rotina para saber se o arquivo havia sido localizado, se localizado executaria a rotina do Reinaldo. Reinaldo, obrigado pela rotina, inclui ela com os ajustes que eu queria e deu certo. Segue abaixo;

Sub Importar_Arquivo ()
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 Excel - .txt", "*.txt" 'Adiciona filtro para arquivos

If .Show = True Then 'Se o parâmetro .Show for igual à True significa que algum arquivo foi selecionado.

'=====FORMATA TODA A PLANILHA EM TEXTO
Cells.Select
Selection.NumberFormat = "@"
Range("B1").Select


Application.ScreenUpdating = False
'Aguardar um segundo antes da operação
LbProcesso.Caption = "AGUARDE, IMPORTANDO NOVO ARQUIVO..."
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 1
'Aguarda um segundo para executar a rotina
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime

Application.ScreenUpdating = False
'LIMPAR
Columns("B:BM").Select
Selection.Delete Shift:=xlToLeft
Range("B1").Select
ActiveWindow.SmallScroll Down:=-3
Range("A1").Select

Caminho = .SelectedItems.Item(1) 'Local + arquivo selecionados são passados para a variável chamada de "Caminho"
Application.ScreenUpdating = False

'LIMPAR A PLANILHA ANTES DA IMPORTAÇÃO
Columns("B:BM").Select
Selection.Delete Shift:=xlToLeft
Range("B1").Select
Range("A1").Select

Dim sPath As String
Dim fName As String
Dim s As String
s = CurDir
'mudar para onde deseja que o diálogo seja apontado
'para quando ele é exibido
sPath = Caminho
ChDrive sPath
Filefilter:="TXT Files (*.TXT),*.TXT")
fName = Caminho
ChDir s
If LCase(fName) = "false" Then Exit Sub

With ActiveSheet.QueryTables.Add _
(Connection:="TEXT;" & fName, _
Destination:=Range("A1"))
.Name = Replace(LCase(fName), ".txt", "")
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileOtherDelimiter = "|"
.TextFileColumnDataTypes = Array(1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With

Unload Me
Range("B1").Select
MsgBox "IMPORTADO COM SUCESSO!", vbInformation, "CONCLUIDO"

Else 'Caso .Show for igual a 'False' então não executar nada.

End If

End With

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

End Sub

Grato

Tov Elen Shau