Ir ao conteúdo

Posts recomendados

Postado

@Midori

 

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

poderias me ajudar como configurar isso por favor?

  Em 23/03/2021 às 13:07, Midori disse:

Pode ser feito assim,

 

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

 

Expandir  

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

poderias me ajudar como configurar isso por favor?

Postado

@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
Postado
  Em 23/03/2021 às 13:48, 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

 

Expandir  

 

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

Postado

@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
Postado
  Em 23/03/2021 às 14:35, 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

 

Expandir  

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

image.png

Postado

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
Postado
  Em 23/03/2021 às 15:43, 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

 

Expandir  

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

Postado

@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
Postado
  Em 23/03/2021 às 18:51, 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.

Expandir  


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

  Em 23/03/2021 às 19:42, 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

Expandir  

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

Postado
  Em 23/03/2021 às 19:42, 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?

Expandir  

 

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
Postado
  Em 23/03/2021 às 19:53, 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

 

Expandir  

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

 

Postado
  Em 23/03/2021 às 20:08, Midori disse:

Deve ter outra planilha ativa rodando a macro anterior.

 

Feche tudo e tente novamente com essa última macro.

Expandir  

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

Postado

@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
Postado
  Em 23/03/2021 às 21:00, 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

 

Expandir  

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

  • 1 ano depois...
Postado

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.

 

Postado

@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
  • 11 meses depois...
Postado

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.

 

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...