Ir ao conteúdo
  • Cadastre-se
Luis Carlos Zambo

Excel RESOLVIDO VBA - Salvar com nome de arquivo variável

Recommended Posts

Pessoal, bom dia!

 

É minha primeira vez aqui no fórum, e eu gostaria de saber como pegar o nome de um arquivo já existente e salvar com um nome reduzido (no meu caso, o nome do arquivo que vem do sistema é no seguinte padrão:

 

"ResumoVendas_GR000_Bonif_012018_Resumido"

o "GR000 é uma variável, existem diversos Códigos diferentes, assim como esse bonificação, que pode ser PBM, OFL, CondCom, Conec, etc, e a data também  varia dependendo do mês que eu extraio o relatório ( posso extrair um relatório de 2005 por exemplo)

 

Eu precisava deixar esse nome de relatório da seguinte maneira:

"GR000_Bonif_012018"

 

mas como as informações são variáveis, eu não sei como fazer. já fiz algumas macros pra abrir e salvar com um nome específico, até com valor de variável, mas não sei se existe algum método ou função que faça isso, ou como separar essas 3 variáveis da string.  Tentei fazer de outras formas, mas não exitem células na planilha com essas informações.

 

Extraio do sistema cerca de 1300, 1400 relatórios por mês, e não quero ter que alterar o nome disso tudo na mão.

Se alguém souber de alguma coisa, ficarei muito grato pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se ajuda

 

    Dim a         As String
    Dim i         As Long
    Dim num       As Single
    Dim divList() As String
    Dim nomRelat  As String
    
    divList = VBA.Split("ResumoVendas_GR000_Bonif_012018_Resumido", "_")
    
    For i = 1 To UBound(divList, 1) - 1
        a = divList(i)
        
        num = num + VBA.Len(a)
        nomRelat = nomRelat & a & "_"
    Next i
    
    divList = VBA.Split(nomRelat, "_")
    num = num + (UBound(divList, 1) - 1)
    
    MsgBox VBA.Trim(VBA.Left(nomRelat, num))

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caraca, excelente código, não conhecia esses métodos... muito bom! me ajudou demais.

 

Mas a ultima linha tá dando erro de compilação, fala que a sintaxe está incorreta. Meu Excel é o 2010, será que é algo relacionado?

 

Ah, mais uma coisa: depois de todo o processo para juntar o nome,  dá pra eu salvar esse novo nome gerado em uma variável?

 

porque eu tenho uma sub pra salvar o relatório, e iria colocar pra salvar com esse nome gerado.

 

Desde já agradeço por ter respondido.

 

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou utilizando o office 2010 32 bits, pra mim não apareceu erros.

 

De qualquer forma experimente desta forma, alterei a declaracao da variavel divlist para variant

 

E o nome gerado esta na variavel nomRelat

 

    Dim a         As String
    Dim i         As Long
    Dim num       As Single
    Dim divList   As Variant
    Dim nomRelat  As String
    
    divList = VBA.Split("ResumoVendas_GR000_Bonif_012018_Resumido", "_")
    
    For i = 1 To UBound(divList, 1) - 1
        a = divList(i)
        
        num = num + VBA.Len(a)
        nomRelat = nomRelat & a & "_"
    Next i
    
    divList = VBA.Split(nomRelat, "_")
    num = num + (UBound(divList, 1) - 1)
    
    nomRelat = VBA.Trim(VBA.Left(nomRelat, num))
    
    MsgBox nomRelat

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eita... eu consegui verificar o código seu só agora, e tem um problema.. rsrs

 

Neste exemplo o nome do arquivo fica sempre como "GR000_Bonif_012018" , mas eu preciso que esse nome varie conforme o arquivo aberto. o GR varia de 000 até 999, existem outros tipos de venda com uma quantidade maior de caracteres e tudo mais, além da data variar também. Como pegar o VBA.Split por exemplo e fazer ele pegar o nome do arquivo aberto na hora da execução da macro?

 

O nome de um arquivo pode ser o seguinte:

 

"GR002_CondCom_032018", ou ainda:

"GR752_PBM_122015"

 

Obrigado novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Luis Carlos Zambo voce não especificou que tipo de arquivo e se o nome do arquivo é da própria planilha.

 

Se for for um arquivo Excel e se for na própria Pasta de trabalho, experimente assim

 

  divList = VBA.Split(ThisWorkbook.Name, "_")

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 minutos atrás, Basole disse:

@Luis Carlos Zambo voce não especificou que tipo de arquivo e se o nome do arquivo é da própria planilha.

 

Se for for um arquivo Excel e se for na própria Pasta de trabalho, experimente assim

 


  divList = VBA.Split(ThisWorkbook.Name, "_")

 

Poxa, perdão, peço desculpas. Eu estava tentando colocar o ActiveWorkbook.Name mas não estava dando certo. Agora compilou pelo menos.  O resto do código não muda,certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, Luis Carlos Zambo disse:

... O resto do código não muda,certo?

 

Isso mesmo !! 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, muito obrigado novamente pela paciência e tempo dedicado. Estou aprendendo ainda a fazer macros. Sei o básico de lógica de programação e pouco sobre métodos e funções do Excel, mas estou aprendendo aos poucos.

 

Você me ajudou demais!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×