locked
Salvar Arquivo CSV e Transf Txt sep ; RRS feed

  • Pergunta

  • Olá galera...

    Tenho que salvar um arquivo do excel para formato em .txt com as colunas separadas por Ponto e Virgula. Manualmente eu salvo em .CSV e depois altero a extensão do arquivo para .Txt

    Fiz uma macro que salva em formato .CSV e quando manualmente troco a extensão do arquivo para .txt depois abro e ele fica separado por virgula em vez de ponto e virgula...

    Alguém tem alguma idéia de como fazer um código  no VBA que salve o arquivo em formato txt e que fique as colunas separadas por ponto e virgula???

     

    quarta-feira, 10 de janeiro de 2007 16:49

Respostas

  • Boa Tarde,

    tente utilizar esse código, comigo funcionou...

    Sub SalvarLog()
     Dim i As Integer
     Dim path As String, arquivo As String
      Dim LogCompleto As String
    LogCompleto = Trim$(Application.UserName & ";" & Now & ";" & ActiveSheet.Name)
     
     path = "c:\logs\"
     Close #1
     Close #2
     arquivo = path & "Log.csv"
     
     Open arquivo For Append As #1
      Print #1, LogCompleto
      Close #1
    End Sub

    sábado, 23 de abril de 2011 20:43

Todas as Respostas

  • Estou com exatamente o mesmo problema, porém eu não preciso converter para TXT, quero CSV mesmo.

     

    Quando eu salvo o arquivo do Excel como CSV através do SALVAR COMO, ele fica separado por ponto-e-virgula... Agora, quando eu salvo através de uma macro, ele fica separado por virgula. Não consigo entender... Também tentei todos os formatos de CSV e nenhum funciona. Está difícil...

    quinta-feira, 26 de abril de 2007 00:31
  • terça-feira, 3 de julho de 2007 18:13
  • Como está a macro que vocês criaram?
    quarta-feira, 4 de julho de 2007 05:52
    Moderador
  • cara, viu o linck postado anteriormente??

    http://support.microsoft.com/kb/288839/pt-br

     

    tive que contornar o problema. Peguei cada um dos valores da minha planilha e fiz um concatenar com Ponto e Virgula entre cada valor. Depois salvei e alterei para txt.

     

    flow

     

     

    quinta-feira, 5 de julho de 2007 21:48
  • cara, viu o linck postado anteriormente??

    http://support.microsoft.com/kb/288839/pt-br

     

    tive que contornar o problema. Peguei cada um dos valores da minha planilha e fiz um concatenar com Ponto e Virgula entre cada valor. Depois salvei e alterei para txt.

     

    flow

     

    Cara,

    Como você conseguiu isso? Eu estou precisando exatamente disso. Preciso salvar uma planilha como CSV por uma macro mas a mesma é salva com "," e não com ";".  Fiz o que você disse mas mesmo assim não deu certo, os valores ficam com a ";" e com a "," tipo: 12345;,

    Você ou alguem mais poderia me ajudar? Thanks...


    quinta-feira, 3 de dezembro de 2009 03:48
  • A rotina que apresentei anteriormene não foi boa.
    Tente esta:

    Sub GravaTXT()
       
    ' Esta rotina grava os dados de uma planilha em um arquivo sequencial tipo txt
       
        Const ForReading = 1, ForWriting = 2, ForAppending = 3
        Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
        Dim fs, f, ts, s
        Set fs = CreateObject("Scripting.FileSystemObject")
           
    'Criar o arquivo texto
       
        fs.CreateTextFile "c:\meuarquivo.txt" ' Cria o arquivo txt que irá receber os dados
       
    'Abre o arquivo no modo Writing
       
        Set f = fs.GetFile("C:\meuarquivo.txt") '
        Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
       
    'Carrega os dados da planilha no arquivo
       
        Mlinha = 1
       
        Do While Sheets("minhaplanilha").Cells(Mlinha, 1) <> ""
       
            Mcol = 1
           
            Do While Sheets("minhaplanilha").Cells(Mlinha, Mcol) <> ""
                ts.Write Sheets("minhaplanilha").Cells(Mlinha, Mcol)
                ts.Write ";" ' Separa o conteúdo das celulas com ; no arquivo de destino 
                Mcol = Mcol + 1
            Loop
           
            ts.Write Chr(13) + Chr(10) ' Grava CRLF no final de cada linha 
            
            Mlinha = Mlinha + 1
           
        Loop
       
    ' Fecha o arquivo
       
        ts.Close

    End sub
    segunda-feira, 18 de janeiro de 2010 23:29
  • Entendo que é um bug da função "ActiveWorkbook.SaveAs" quando utilizado "FileFormat:=xlCSV..." na macro.

    Já que fazendo o processo manualmente o arquivo é salvo corretamente.

    Ou seja, tive q acatar (MUITO INSATISFEITO) a orientação relatada na página da microsoft:

    http://support.microsoft.com/kb/288839/pt-br

    <...>

    clique em Salvar como no menu arquivo para salvar o arquivo manualmente.

    <...>

    Que porcaria.

    terça-feira, 14 de setembro de 2010 14:57
  • Baixe o ASAP Utilities 4.6.x para Excel 2007, ele tem um recurso de Export (CTRL+alt+G) que permite definir o limitador e separador.

    terça-feira, 1 de março de 2011 14:31
  • Fala Pavão

    Modo Pratico é rapido para qualquer momento utilizar sem muito problema é so utilizar os codigos abaixo escolhendo a extensão conforme o trabalho que precisa.

    A menos que seja necessario um codigo com opções diferentes de estesão para cada arquivo, mais isto tambem não seria dificil utilizando o forms.

    Sub Lista_zero()
        Dim i As Integer
        Dim nm As String
        nm = "ListaZero.txt" '' Tipo de extensão a definir
        Open "C:\Commerce\Vikam\" & nm For Output As #1
        For i = 1 To 15000
            If Cells(i, 3).Value <> "" Then
                Print #1, Cells(i, 1).Value & ";" & Cells(i, 2).Value & ";" & Cells(i, 3).Value ''Colunas do Trabalho com separadores a definir
            End If
        Next
        Close #1
    End Sub

    Abraços

    segunda-feira, 7 de março de 2011 14:53
  • Boa Tarde,

    tente utilizar esse código, comigo funcionou...

    Sub SalvarLog()
     Dim i As Integer
     Dim path As String, arquivo As String
      Dim LogCompleto As String
    LogCompleto = Trim$(Application.UserName & ";" & Now & ";" & ActiveSheet.Name)
     
     path = "c:\logs\"
     Close #1
     Close #2
     arquivo = path & "Log.csv"
     
     Open arquivo For Append As #1
      Print #1, LogCompleto
      Close #1
    End Sub

    sábado, 23 de abril de 2011 20:43
  • Quando você salva uma planilha manualmente como .csv e depois abre a mesma com um editor de texto como notepad, fica separado por "ponto e virgula", quando você salva usando os comandos no VBA ele fica separado por virgula apenas.

    Então a solução que eu encontrei foi simular o "salvamento" manual usando a função Shell e Sandkeys

    Public Function Exportar_Arquivos_Sapiens(Caminho As String, Name As String)
        Dim MyExcel As Excel.Application
        Set MyExcel = CreateObject("Excel.Application")
        MyExcel.Workbooks.Add
        Dim L As Integer
        Dim C As Integer
        Dim LL As Integer
        Dim CC As Integer
        Dim PathName As String
        Dim PathNameCSV As String
        L = 4
        C = 1
        LL = 1
        CC = 1
        PathName = Caminho & "\Para Sapiens\" & Name
        Do While C < 14
            Do While Cells(L, C).Value <> ""

                MyExcel.ActiveSheet.Cells(LL, CC).Value = Cells(L, C).Value
                L = L + 1
                LL = LL + 1
            Loop
            L = 4
            LL = 1
            C = C + 1
            CC = CC + 1
        Loop

        Cells(1, 1).Select



        On Error Resume Next
            Kill (PathName)
        On Error GoTo 0

        MyExcel.Application.DisplayAlerts = False

        MyExcel.ActiveWorkbook.SaveAs Filename:=PathName, _
            FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False

        MyExcel.ActiveWindow.Close

        MyExcel.Application.DisplayAlerts = True

        PathNameCSV = MyExcel.Path & "\excel.exe " & Chr(34) & PathName & Chr(34)

        Dim MyApp
        MyApp = Shell(PathNameCSV, vbMaximizedFocus)

        On Error Resume Next
            Kill (PathName)
        On Error GoTo 0

        PathName = Replace(PathName, ".xls", ".csv", 1, 1, vbTextCompare)

        On Error Resume Next
            Kill (PathName)
        On Error GoTo 0
        Dim Espera As Integer

        Espera = 1

        Sistema.Pausar (Espera)
        SendKeys ("%") 'Alt
        Sistema.Pausar (Espera)
        SendKeys ("A") 'Abrir menu
        Sistema.Pausar (Espera)
        SendKeys ("C")
        Sistema.Pausar (Espera)
        SendKeys ("{TAB}") 
        Sistema.Pausar (Espera)
        SendKeys ("C")
        Sistema.Pausar (Espera)
        SendKeys ("{TAB}")
        Sistema.Pausar (Espera)
        SendKeys ("S")
        Sistema.Pausar (Espera)
        SendKeys ("~") 'Enter
        Sistema.Pausar (Espera)
        SendKeys ("S")
        Sistema.Pausar (Espera)
        SendKeys ("%") 'Alt
        Sistema.Pausar (Espera)
        SendKeys ("A") 'Abrir menu
        Sistema.Pausar (Espera)
        SendKeys ("R") 
        Sistema.Pausar (Espera)
        SendKeys ("N") 

    End Function

                                                                
    sábado, 30 de agosto de 2014 16:26
  • Will,

    Obrigado pela contribuição, mas como pode ver, o tópico ao qual você respondeu é de 2007. Provavelmente o inquiridor não precisa/não lerá sua resposta. Favor não "ressucitar" tópicos muito antigos. No entanto, será de grande valia se você compartilhar seu conhecimento e responder perguntas dos últimos dias.

    Vou bloquear este tópico.

    Abraço.



    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 5 de setembro de 2014 19:40
    Moderador