Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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.

 

 

 

Editado por NascarBR
  • 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

 

Editado por Basole
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, muito obrigado mesmo, salvou um bom tempo meu, até porque vou fazer uma outra macro e eu precisava saber dessa informação.

Editado por NascarBR

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.

Editado por Luis Carlos Zambo

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






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

×