Ir ao conteúdo
  • Cadastre-se

Excel VBA - Salvar com nome de arquivo variável


Ir à solução Resolvido por Basole,

Posts recomendados

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.

Link para o comentário
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
Link para o comentário
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
Link para o comentário
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
Link para o comentário
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.

Link para o comentário
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?

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!