Ir ao conteúdo
  • Cadastre-se

Comando Salvar em VBA com Nome variável


Ir à solução Resolvido por Visitante,

Posts recomendados

Olá pessoal,

 

Em meu formulário VBA, quero habilitar um botão chamado "Salvar Documento" que faça o seguinte:

 

- Salve como

- Diretório pré-estabelecido (na própria programação)

- E que o nome do arquivo a ser salvo, já esteja pré-definido, sendo ele, uma variável que depende do valor de determinada célula

 

ActiveWorkbook.SaveAs Filename:="D:\Documentos\Excel\[A1].xlsm", FileFormat _
:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
 
Onde [A1] seria o valor da célula A1
 
Segue em anexo o exemplo que fiz para este caso.
 
Penso que seria necessário usar a concatenação, mas não consegui.
 
Agradeço qualquer ajuda que me for passada
 
Att, 
 
Yago Cypriano

Teste.rar

Link para o comentário
Compartilhar em outros sites

  • Solução

Em todo tipo de concatenação é assim que devo usar?

a sintaxe normal é:

"texto entre aspas" & VariávelSemAspas & "mais texto entre aspas"

 

PS: Aproveitando o embalo, teria como fazer uma verificação simples antes de executar uma macro? Como por exemplo:

 

If Sheets("Plan1") Existir Then

....

End If

Veja exemplo abaixo.

Sub VerificaPlan() Dim ws As Worksheet, nomePlan As String  nomePlan = "Plan1" 'ou nomePlan = [A1] se quiser colocar o nome em uma célula  For Each ws In ThisWorkbook.Worksheets   If ws.Name Like nomePlan Then    MsgBox "existe uma planilha com nome " & nomePlan    Exit Sub   End If  Next ws  MsgBox "não existe planilha com nome " & nomePlanEnd Sub

 

Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...

Prezados, boa tarde!

 

To com um prolema a dias, 

montei esse código com o intuito de que salve a pasta na data certa, no mes certo e com o nome certo,mas ao tentar salvar ela dá que o documento não foi salvo. Segue o codigo abaixo, conseguem me ajudar?

 

 

Sub testing()

Dim path As String
Dim nome As String
Dim mes As String
Dim dia As String
Dim ano As String


mes = MonthName(Month(Now))
dia = Date - 1
nome = "RESUMO DIARIO" & dia
ano = Year(Now)
path = "C:\Users\galemos\Desktop\ano\mes\"

Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=path & nome & ".xlsx", FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True
    
Active.Workbook.Close

End Sub

 

image.png.65d36bcec64c6c7c4132384bd05c544f.png

Link para o comentário
Compartilhar em outros sites

Testaí...

 

Sub SalvaArquivo()

 Dim path As String
 Dim nome As String
 Dim mes As String
 Dim data As String
 Dim ano As String
 
  mes = Format(Date, "mmmm")
  data = Format(Date - 1, "dd_mm_yyyy")
  nome = "RESUMO DIARIO" & data
  ano = Format(Date, "yyyy")
  path = "C:\Users\galemos\Desktop\" & ano & "\" & mes & "\"
 
  Application.DisplayAlerts = False
      ActiveWorkbook.SaveAs Filename:=path & nome & ".xlsx", FileFormat:=xlOpenXMLWorkbook
      Application.DisplayAlerts = True
 
  ThisWorkbook.Close

End Sub

 

Link para o comentário
Compartilhar em outros sites

Eu pedi para você disponibilizar o arquivo pois às vezes ao copiar o código aqui do fórum e colar no módulo, esse "transporte" altera o código; lembrando que o código salva o seu arquivo como .xlsx, ou seja, sem macros (post #7). Mas ... tente fazer as verificações conforme comentado abaixo.

 

O caminho para salvar o arquivo é este ~~~> C:\Users\galemos\Desktop\2019\abril\

Então, olhando o caminho da direita para a esquerda, o arquivo será salvo na pasta existente de nome "abril" (pois é o mês corrente), que deve ser uma sub pasta  da pasta de nome "2019" (pois é o ano corrente), ... , e assim até a unidade C.

 

Então verifique se esse caminho existe na unidade C (ou seja, verifique se todas as pastas que fazem parte do caminho existem e se estão na sequência informada no caminho, isto é, cada uma sendo sub pasta da pasta à esquerda).

 

O código acrescenta ao caminho acima o nome do arquivo (e não da planilha, como você comentou), então se for salvo hoje (26/abr/19) o nome será RESUMO DIARIO25_04_2019, e o caminho completo será C:\Users\galemos\Desktop\2019\abril\RESUMO DIARIO25_04_2019

Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...

Bom dia Pessoal
Tenho uma solicitação próximo deste assunto.

Preciso Salvar uma copia da planilha atual .

mas preciso que seja verificado se ja existe um arquivo com o mesmo nome .
Ex. "Relatorio-01-08-2022- 01"
Se já existe quero que seja salvo para "Relatorio-01-08-2022- 02"

Após salvar a copia preciso que seja enviado via e-mail em anexo.

Poderia me ajudar, acredito que tenha que adicionar uma estrutura de repeticao.

Tenho o seguinte condigo.

 

 

 

Sub SavaCopia_envia_Email()


    Dim sPara      As String
    Dim sMsg       As String
    Dim sAssunt    As String
    Dim NomeCopia As String
    Dim DirCopia    As String
    Dim Contador   As Integer
    Dim Caminho     As String
    
    

        NomeCopia = "Relatório_" & VBA.Format(VBA.Now, "dd-mm-yyyy") & "." & Contador & ".xlsx"
        Caminho = "C:\Users\Nunes\Desktop\PROJETO\Teste\BKPDOCUMENTO\"
        DirCopia = "C:\Users\Nunes\Desktop\PROJETO\Teste\BKPDOCUMENTO\" + NomeCopia
        Contador = 1
    
        
        If NomeCopia = Caminho Then
        Contador = Contador + 1
        
        Else
        
        ActiveWorkbook.SaveAs Filename:= _
        Caminho + NomeCopia, _
        FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
        
        
        End If
        
    
        'Enviar e-mail
    
        NomeCopia = "Relatório_" & VBA.Format(VBA.Now, "dd-mm-yyyy") & "." & Contador & ".xlsx"
        sAssunt = "Assunto de Envio de Relatório em Anexo"
        sMsg = "Mensagem teste de envio de e-mail com anexo"
  
        Dim OutlookApp   As Object
        Dim OutlookMail  As Object
        Set OutlookApp = CreateObject("Outlook.Application")
        Set OutlookMail = OutlookApp.CreateItem(0)
    
         With OutlookMail
        .to = ""
        .CC = ""
        .BCC = ""
        .Subject = sAssunt
        .Body = sMsg
        .Attachments.Add DirCopia
        .Display ' para envia o email diretamente defina o código  .Send
        
        End With
        Set OutlookMail = Nothing
        Set OutlookApp = Nothing
        
        
    
End Sub

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