Ir ao conteúdo
  • Cadastre-se

Excel macro para salvar em csv


Ir à solução Resolvido por Midori,

Posts recomendados

Eai pessoal, beleza?

 

com uma planilha que precisa criar um macro (botão) para que atuomaticamente abra a caixa de "salvar como" já selecionado o formato "csv separado por virgulas"

deixando somente o passo de inserir o nome manual.

 

alguem conseguiria me ajudar?

Link para o comentário
Compartilhar em outros sites

@Midori

 

sou leigo no VBA, não sei inserir isso como macro.

poderias me ajudar como configurar isso por favor?

31 minutos atrás, Midori disse:

Pode ser feito assim,

 


Application.GetSaveAsFilename FileFilter:="Delimitado por vírgulas (*.csv), *.csv"

 

sou leigo no VBA, não sei inserir isso como macro.

poderias me ajudar como configurar isso por favor?

Link para o comentário
Compartilhar em outros sites

@Matheus Ittner Giampiccolo  No menu Desenvolvedor escolha Inserir > Controles Active X > Botão de Comando.

 

Após desenhar o botão na planilha dê dois cliques nele para abrir o editor e cole o código assim,

 

Private Sub CommandButton1_Click()
Application.GetSaveAsFilename FileFilter:="Delimitado por vírgulas (*.csv), *.csv"
End Sub

 

Para funcionar volte para a planilha e desmarque a opção Modo de Design do menu Desenvolvedor.

 

Aqui também tem um passo a passo,

 

https://support.microsoft.com/en-us/office/assign-a-macro-to-a-form-or-a-control-button-d58edd7d-cb04-4964-bead-9c72c843a283

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

29 minutos atrás, Midori disse:

@Matheus Ittner Giampiccolo  No menu Desenvolvedor escolha Inserir > Controles Active X > Botão de Comando.

 

Após desenhar o botão na planilha dê dois cliques nele para abrir o editor e cole o código assim,

 


Private Sub CommandButton1_Click()
Application.GetSaveAsFilename FileFilter:="Delimitado por vírgulas (*.csv), *.csv"
End Sub

 

Para funcionar volte para a planilha e desmarque a opção Modo de Design do menu Desenvolvedor.

 

Aqui também tem um passo a passo,

 

https://support.microsoft.com/en-us/office/assign-a-macro-to-a-form-or-a-control-button-d58edd7d-cb04-4964-bead-9c72c843a283

 

 

Consegui fazer o botão e abre a caixa para salvar, porém nao conclui 

 

quando salvo, depois vou na pasta e não esta la

 

 

image.png

Link para o comentário
Compartilhar em outros sites

@Matheus Ittner Giampiccolo  Essa função é para atribuir o nome do arquivo, para salvar pode ser assim,

 

Private Sub CommandButton1_Click()
    Dim Arquivo As String
    
    Arquivo = Application.GetSaveAsFilename( _
        FileFilter:="Delimitado por vírgulas (*.csv), *.csv")
    
    ThisWorkbook.ActiveSheet.Copy
    ActiveWorkbook.SaveAs Arquivo, xlCSV
    ActiveWorkbook.Close
End Sub

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

28 minutos atrás, Midori disse:

@Matheus Ittner Giampiccolo  Essa função é para atribuir o nome do arquivo, para salvar pode ser assim,

 


Private Sub CommandButton1_Click()
    Dim Arquivo As String
    
    Arquivo = Application.GetSaveAsFilename( _
        FileFilter:="Delimitado por vírgulas (*.csv), *.csv")
    
    ThisWorkbook.ActiveSheet.Copy
    ActiveWorkbook.SaveAs Arquivo, xlCSV
    ActiveWorkbook.Close
End Sub

 

Agora esta salvando certinho, porém fica esses ,,,, nas celulas abaixo, teriam que ficam em branco

image.png

Link para o comentário
Compartilhar em outros sites

Se puder anexar o arquivo vai ficar mais fácil ajudar nisso, mas essas linhas devem ter fórmulas ou caractere vazio, por isso fica assim. Para remover essa vírgulas tem que identificar a última linha com os dados e apagar antes de salvar. Isso pode ser feito via macro com uma função que conte a coluna correta. Supondo que seja a coluna E,

 

Private Sub CommandButton1_Click()
    Dim Arquivo As String
    Dim Linhas  As Long
    
    Arquivo = Application.GetSaveAsFilename( _
        FileFilter:="Delimitado por vírgulas (*.csv), *.csv")
        
    ThisWorkbook.ActiveSheet.Copy
    
    With ActiveWorkbook.ActiveSheet
        Linhas = WorksheetFunction.CountA(.[E:E])
        .Range(.Cells(Linhas + 1, 1), _
            .Cells([A:A].Rows.Count, 1)).EntireRow.Clear
    End With
    ActiveWorkbook.SaveAs Arquivo, xlCSV
    ActiveWorkbook.Close
End Sub

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

37 minutos atrás, Midori disse:

Se puder anexar o arquivo vai ficar mais fácil ajudar nisso, mas essas linhas devem ter fórmulas ou caractere vazio, por isso fica assim. Para remover essa vírgulas tem que identificar a última linha com os dados e apagar antes de salvar. Isso pode ser feito via macro com uma função que conte a coluna correta. Supondo que seja a coluna E,

 



Private Sub CommandButton1_Click()
    Dim Arquivo As String
    Dim Linhas  As Long
    
    Arquivo = Application.GetSaveAsFilename( _
        FileFilter:="Delimitado por vírgulas (*.csv), *.csv")
        
    ThisWorkbook.ActiveSheet.Copy
    
    With ActiveWorkbook.ActiveSheet
        Linhas = WorksheetFunction.CountA(.[E:E])
        .Range(.Cells(Linhas + 1, 1), _
            .Cells([A:A].Rows.Count, 1)).EntireRow.Clear
    End With
    ActiveWorkbook.SaveAs Arquivo, xlCSV
    ActiveWorkbook.Close
End Sub

 

exclui as linhas abaixo para limpar elas, agora funcionou!

Muito obrigado pela ajuda!!!!

tenho como configurar para salvar em uma pasta especifica?

 

C:\Users\User\Desktop\cote fácil 

este seria o caminho

Link para o comentário
Compartilhar em outros sites

@Matheus Ittner Giampiccolo Você pode passar o diretório para o parâmetro da função, aí a janela sempre vai abrir nessa pasta,

 

Private Sub CommandButton1_Click()
    Dim Arquivo As Variant
    Dim Linhas  As Long
    
    Arquivo = Application.GetSaveAsFilename( _
        InitialFileName:="C:\Users\User\Desktop\cote fácil\", _
        FileFilter:="Delimitado por vírgulas (*.csv), *.csv")
    
    If Arquivo <> False Then
        ThisWorkbook.ActiveSheet.Copy
    
        With ActiveWorkbook.ActiveSheet
            Linhas = WorksheetFunction.CountA(.[E:E])
            .Range(.Cells(Linhas + 1, 1), _
                .Cells([A:A].Rows.Count, 1)).EntireRow.Clear
        End With
        ActiveWorkbook.SaveAs Arquivo, xlCSV
        ActiveWorkbook.Close
    End If
End Sub

 

Mas se não quiser dar a opção de escolher a pasta, pode atribuir o diretório para uma variável e depois concatenar com outra só com o nome do arquivo.

  • Amei 1
Link para o comentário
Compartilhar em outros sites

40 minutos atrás, Midori disse:

@Matheus Ittner Giampiccolo Você pode passar o diretório para o parâmetro da função, aí a janela sempre vai abrir nessa pasta,

 


Private Sub CommandButton1_Click()
    Dim Arquivo As Variant
    Dim Linhas  As Long
    
    Arquivo = Application.GetSaveAsFilename( _
        InitialFileName:="C:\Users\User\Desktop\cote fácil\", _
        FileFilter:="Delimitado por vírgulas (*.csv), *.csv")
    
    If Arquivo <> False Then
        ThisWorkbook.ActiveSheet.Copy
    
        With ActiveWorkbook.ActiveSheet
            Linhas = WorksheetFunction.CountA(.[E:E])
            .Range(.Cells(Linhas + 1, 1), _
                .Cells([A:A].Rows.Count, 1)).EntireRow.Clear
        End With
        ActiveWorkbook.SaveAs Arquivo, xlCSV
        ActiveWorkbook.Close
    End If
End Sub

 

Mas se não quiser dar a opção de escolher a pasta, pode atribuir o diretório para uma variável e depois concatenar com outra só com o nome do arquivo.


Consegui fazer abrir direto na pasta que desejo selecionar.

Porém só agora percebi que o arquivo esta sendo salvo separando por virgula, preciso de separe por ";"

será que é possivel?

image.thumb.png.13b2348fc70e995043025d1626f3b3aa.png

agora, Matheus Ittner Giampiccolo disse:


Consegui fazer abrir direto na pasta que desejo selecionar.

Porém só agora percebi que o arquivo esta sendo salvo separando por virgula, preciso de separe por ";"

será que é possivel?

image.thumb.png.13b2348fc70e995043025d1626f3b3aa.png

image.thumb.png.4e7c5fcd6b67ee4590392fc735fa616d.pngdeimage.thumb.png.f733a1c603bbd76b243dc066a9bb40db.png

Link para o comentário
Compartilhar em outros sites

11 minutos atrás, Matheus Ittner Giampiccolo disse:

Porém só agora percebi que o arquivo esta sendo salvo separando por virgula, preciso de separe por ";"

será que é possivel?

 

Veja se resolve atribuindo True ao parâmetro Local. Deixe a linha do SaveAs assim,

 

ActiveWorkbook.SaveAs Filename:=Arquivo, FileFormat:=xlCSV, Local:=True

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

agora, Midori disse:

 

Veja se resolve atribuindo true ao parâmetro Local. Deixe a linha do SaveAs assim,

 


ActiveWorkbook.SaveAs Filename:=Arquivo, FileFormat:=xlCSV, Local:=True

 

image.thumb.png.24f91873747816c273ac1b96e50515f6.pngagora foi, porém abre novamente essa janela de salvar alterações.

 

se clico em salvar voltar ao padrão errado, se não salvo fica correto

 

Link para o comentário
Compartilhar em outros sites

9 minutos atrás, Matheus Ittner Giampiccolo disse:

agora foi, porém abre novamente essa janela de salvar alterações.

 

se clico em salvar voltar ao padrão errado, se não salvo fica correto

Deve ter outra planilha ativa rodando a macro anterior.

 

Feche tudo e tente novamente com essa última macro.

  • Amei 1
Link para o comentário
Compartilhar em outros sites

8 minutos atrás, Midori disse:

Deve ter outra planilha ativa rodando a macro anterior.

 

Feche tudo e tente novamente com essa última macro.

refiz do zero tudo e continuar abrindo a janela de salvar ou não( mesmo ja tendo sido salvo)

ps. o arquivo ja foi salvo corretamente, ele é aberto automaticamente, quando é fechado solicita salvar

image.thumb.png.e92b961b03a6e8cfafb03deacfb22519.png

Link para o comentário
Compartilhar em outros sites

@Matheus Ittner Giampiccolo A macro exibe uma mensagem de confirmação no caso de tentar salvar um arquivo com o mesmo nome de um já existente. A outra mensagem deve ser por alguma atualização na planilha feita antes de fechar, pode ser uma fórmula. Veja se com DisplayAlerts resolve,

 

Private Sub CommandButton1_Click()
    Dim Arquivo As Variant
    Dim Linhas  As Long
    
    Arquivo = Application.GetSaveAsFilename( _
        InitialFileName:="C:\Users\User\Desktop\cote fácil\", _
        FileFilter:="Delimitado por vírgulas (*.csv), *.csv")
    
    If Arquivo <> False Then
        ThisWorkbook.ActiveSheet.Copy
    
        With ActiveWorkbook.ActiveSheet
            Linhas = WorksheetFunction.CountA(.[E:E])
            .Range(.Cells(Linhas + 1, 1), _
                .Cells([A:A].Rows.Count, 1)).EntireRow.Clear
        End With
        ActiveWorkbook.SaveAs Filename:=Arquivo, FileFormat:=xlCSV, Local:=True
        Application.DisplayAlerts = False
        ActiveWorkbook.Close
        Application.DisplayAlerts = True
    End If
End Sub

 

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

59 minutos atrás, Midori disse:

@Matheus Ittner Giampiccolo A macro exibe uma mensagem de confirmação no caso de tentar salvar um arquivo com o mesmo nome de um já existente. A outra mensagem deve ser por alguma atualização na planilha feita antes de fechar, pode ser uma fórmula. Veja se com DisplayAlerts resolve,

 


Private Sub CommandButton1_Click()
    Dim Arquivo As Variant
    Dim Linhas  As Long
    
    Arquivo = Application.GetSaveAsFilename( _
        InitialFileName:="C:\Users\User\Desktop\cote fácil\", _
        FileFilter:="Delimitado por vírgulas (*.csv), *.csv")
    
    If Arquivo <> False Then
        ThisWorkbook.ActiveSheet.Copy
    
        With ActiveWorkbook.ActiveSheet
            Linhas = WorksheetFunction.CountA(.[E:E])
            .Range(.Cells(Linhas + 1, 1), _
                .Cells([A:A].Rows.Count, 1)).EntireRow.Clear
        End With
        ActiveWorkbook.SaveAs Filename:=Arquivo, FileFormat:=xlCSV, Local:=True
        Application.DisplayAlerts = False
        ActiveWorkbook.Close
        Application.DisplayAlerts = True
    End If
End Sub

 

agora foi!!! troquei de pc, show obrigado

poderia me ajudar com o codigo para preenchimento automatico da coluna E (é uma formula). queria que fosse em um botão também, mas deve terminar quando as outra colunas estiverem vazias.

 

image.thumb.png.15fe41cf8faeeab2b9807faa8e8bd97d.png

image.thumb.png.972a03297652fefa4e257e9515bd0956.png

Link para o comentário
Compartilhar em outros sites

5 horas atrás, Midori disse:

@Matheus Ittner Giampiccolo Pegue alguma coluna como referência da última linha preenchida com xlDown. Usando a D fica assim,

 


[E1].AutoFill [E1].Resize([D1].End(xlDown).Row)

 

Muito obrigado deu certo

me salvasse, nem sei como agradecer!!!!

obrigado mesmo

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Boa Tarde Midori

Copiei o código que você criou acima e ele salva tudo certo. Porém quando eu abro no notepad++, aparece uma linha em branco a mais do que a tabela tem. Isso atrapalha meu fluxo para frente com esse arquivo.
 

sabe como me ajudar?

 

Private Sub CommandButton1_Click()
    Dim Arquivo As Variant
    Dim Linhas  As Long
    
    Arquivo = Application.GetSaveAsFilename( _
        InitialFileName:="C:\Users\Public\", _
        FileFilter:="Delimitado por vírgulas (*.csv), *.csv")
    
    If Arquivo <> False Then
        ThisWorkbook.ActiveSheet.Copy
    
        With ActiveWorkbook.ActiveSheet
            Linhas = WorksheetFunction.CountA(.[O:O])
            .Range(.Cells(Linhas + 1, 1), _
                .Cells([A:A].Rows.Count, 1)).EntireRow.Delete
        End With
        ActiveWorkbook.SaveAs Filename:=Arquivo, FileFormat:=xlCSV, Local:=False
        Application.DisplayAlerts = False
        ActiveWorkbook.Close
        Application.DisplayAlerts = True
    End If
End Sub

 

 

No excel não tem nada nas linhas abaixo da tabela preenchida.

 

Link para o comentário
Compartilhar em outros sites

@Gabriel Spinola Sempre terá uma linha sem dados na última do arquivo csv. Isso é comum em arquivos texto por causa do Carriage Return (caractere de retorno de carro). No VBA é a constante vbCr (ou vbCrLf) para mover o cursor para a próxima linha como se fosse o enter. Uma forma remover o caractere vbCr da última linha é com outra macro para ler todas as linhas do arquivo csv e ir copiando para outro, aí quando chegar na última linha não coloca o vbCr.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 11 meses depois...

Midori, boa noite! Gostaria de usar a mesma macro que fez para o Matheus, porém a mesma deve salvar diretamente o arquivo em determinada pasta e não deve abrir o "salvar como". Qual alteração deve ser feita? Além disso, gostaria de usar a macro no Módulo1, ou seja, terá que especificar na macro a qual worksheet se refere. Consegue ajudar? Segue abaixo a macro.

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!