Logo Hardware.com.br
Filman
Filman Novo Membro Registrado
6 Mensagens 0 Curtidas

Salvar Planilha Automaticamente no Diretório expecífico

#1 Por Filman 26/05/2009 - 19:31

Galera gostaria da ajuda de vocês novamente para salvar a planilha automaticamente no diretório C:\

O problema é gostaria que salvasse somente uma vez por mês de que forma?

A Macro tera que reconhecer o que foi trocado de mês e então executa a
função, salvando com o formato "Nome_da_Planilha_Mês-Ano.xls" pegara o nome da planilha que ja esta aberta e acrecenta somente o mes e ano salva
no diretório C:\ e fecha a planilha sava no momento e fica somente aberta a
que é padrão.

Ex.
Nome da Planilha: JonathanCP
Eu abro essa planilha e estou trabalhando com ela o mês todo suponha que
seja o mês de MAIO quando chegar segunda-feira que vem dia primeiro
eu abro a planilha e automaticamente a macro salva essa planilha no C:\
( C:\JonathanCP_Maio-2009.xls ) e o excel quando você faz a opção
"SALVAR COMO" fica aberta a planilha que acabou de salvar no caso
JonathanCP_Maio-2009, gostaria que essa ficasse fechada e permaneceria
aberta a JonathanCP.xls que é a padrão.

Sera que tem como fazer isso é como se fosse uma rotina onde detecta que
estamos em um novo mês.

Conto com a ajuda de vocês pois é um trabalho para faculdade e não sei nem
como fazer isso.

Obrigado
Fico no Aguardo

Responder Tópico
KodornaRocks
KodornaRocks Membro Junior Registrado
49 Mensagens 7 Curtidas
#2 Por KodornaRocks
26/05/2009 - 22:22

Filman,

Na sua planílha, crie um novo sheet com o nome "backup_control"

depois de criado, execute esta sub em qualquer módulo:

Sub esconde_sheet()
Worksheets("backup_control&quot.Visible = 2
End SubAo executa-la, o sheet backup_control vai ficar com a propriedade visible = 2, ou seja, SheetVeryHidden.

No VBA, aperte Ctrl+R para abrir o Project Manager, navegue até o módulo Objeto "ThisWorkBook" da sua planílha, clique com o direito nele e "View Code".

Cole o seguinte código:
Private Sub Workbook_Open()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
On Error GoTo erros

'Retorna o caminho completo até o arquivo sendo utilizado + seu nome
este_arquivo = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
'Divide o nome (provavelmente JonathanCP.xls) em JonathanCP e xls
nome_dividido = Split(ActiveWorkbook.Name, ".&quot
'Busca a ultima data de backup
ultimo_backup = Worksheets("backup_control&quot.Cells(1, 2).Value
'Salva se ainda não existir nenhum backup ou caso não tenha sido salvo o backup do mês anterior
If ultimo_backup = "" Or Month(ultimo_backup) <> Month(DateSerial(Year(Date), Month(Date) - 1, Day(Date))) Then
'Novo nome do arquivo c:\teste\JonatanCP_abril_2009.xls por exemplo
novo_nome = "C:\teste\" & nome_dividido(0) & "_" & _
MonthName(Month(DateSerial(Year(Date), Month(Date) - 1, Day(Date)))) & "_" & _
Year(DateSerial(Year(Date), Month(Date) - 1, Day(Date))) & ".xls"
'Grava a data do ultimo backup
Worksheets("backup_control&quot.Cells(1, 2).Value = DateSerial(Year(Date), Month(Date) - 1, Day(Date))
'Salva o Backup
ActiveWorkbook.SaveAs Filename:=novo_nome, _
FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
'Volta para o arquivo que estava sendo usado
ActiveWorkbook.SaveAs Filename:=este_arquivo, _
FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
End If
'Os Month sobre DateSerial é para garantir que não exista o mês 0 (Caso seja janeiro)

erros:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End SubEu imagino que você entenda pelo menos o sulficiente de VBA para sacar o código... qualquer dúvida man.. só da um toque...


Diogo Lima Paim

"Sex is like Hacking . You get in, you get out, then you hope that you didn't leave something behind that can be traced back to you." (PS. Robei do Vella (tentehackear.org)

Filman
Filman Novo Membro Registrado
6 Mensagens 0 Curtidas
#3 Por Filman
27/05/2009 - 14:02

Bom primeiro vamos lá irei criar uma nova ABA com o nome Bachup_Control
certo? Essa nova aba servira para amarzenar a data do ultimo backup realizado
correto? Criarei em uma modulo uma sub dizendo ao excel que a planilha expecificada com o nome Backup_Control ficara oculta defitinitivamente.

Ja no código;

'Retorna o caminho completo até o arquivo sendo utilizado + seu nome
este_arquivo = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
Este_Arquivo ( Qual nome coloco > JonathanCP ou JonathanCP.xls )

'Divide o nome (provavelmente JonathanCP.xls) em JonathanCP e xls
nome_dividido = Split(ActiveWorkbook.Name, ".")
Nome_Dividido ( É o nome > JonathanCP ou não )

'Busca a ultima data de backup
ultimo_backup = Worksheets("backup_control").Cells(1, 2).Value
Ultimo_Backup ( O que coloco? )

'Novo nome do arquivo c:\teste\JonatanCP_abril_2009.xls por exemplo
novo_nome = "C:\teste\" & nome_dividido(0) & "_" & _
MonthName(Month(DateSerial(Year(Date), Month(Date) - 1, Day(Date)))) & "_" & _
Year(DateSerial(Year(Date), Month(Date) - 1, Day(Date))) & ".xls"
Novo_Nome ( O que coloco? )

Desculpe fazer tantas perguntas sei um pouco sobre VBA mais não o bastante!

Espero que me ajude

Obrigado

Deus não escolhe os capacitados, capacita os escolhidos.
O mistério não é um muro onde a inteligencia se esbarra, mas sim um oceano onde ela mergulha. Portanto o que sabemos é uma gota e o que ignoramos é uma imensidão só por ter medo de encarar com coragem os desáfios nos dados!

KodornaRocks
KodornaRocks Membro Junior Registrado
49 Mensagens 7 Curtidas
#4 Por KodornaRocks
27/05/2009 - 14:27

Bom primeiro vamos lá irei criar uma nova ABA com o nome Bachup_Control
certo?Errado, crie o sheet: "backup_control" tudo minusculo, lembre-se VB é case sensitive.

'Retorna o caminho completo até o arquivo sendo utilizado + seu nome
este_arquivo = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
Este_Arquivo ( Qual nome coloco > JonathanCP ou JonathanCP.xls )Não não... o activeworkbook.path vai retornar a pasta do arquivo atual, exemplo: C:\Documents and Settings\user\Desktop
e o ActiveWorkbook.Name retorna literalmente o nome do arquivo ex: JonathanCP.xls.
Ou seja, nessa linha você não meche, ela serve apenas pra buscar exatamente pra qual arquivo deve-se voltar após salvo o backup (Pra não ficar daquela maneira que você citou, editando em cima do backup)


do código que eu mandei, você só precisa editar esta linha:

novo_nome = "C:\teste\" & nome_dividido(0) & "_" & _
MonthName(Month(DateSerial(Year(Date), Month(Date) - 1, Day(Date)))) & "_" & _
Year(DateSerial(Year(Date), Month(Date) - 1, Day(Date))) & ".xls"

esta linha define o nome do backup a ser salvo.
Você pode editar a aprte do C:\teste\ para qualquer folder que você quiser que fique salvo os backups, por exemplo C:\ ou C:\JonathanCP\BackupMensal

vamos explicar essa linha passo apasso:
novo_nome -> Variavel que guarda o caminho do backup
C:\teste\ < O Path do arquivo.
nome_dividido(0) vai retornar o que tem antes do "." no caso JonathanCP (depois do ponto é o xls)
MonthName(Month(DateSerial(Year(Date), Month(Date) - 1, Day(Date)))) essa linha retorna o nome do mês anterior ao que você está, poderia ser apenas MonthName(Month(Date) - 1) mas ai poderia dar pau em janeiro.
Year(DateSerial(Year(Date), Month(Date) - 1, Day(Date))) retorna o ano do mês anterior.
".xls" Extensão do arquivo.


to atrazadasso pro trampo, deixa suas dúvidas ai que eu posso responder.

Grande abraço

"Sex is like Hacking . You get in, you get out, then you hope that you didn't leave something behind that can be traced back to you." (PS. Robei do Vella (tentehackear.org)

Responder Tópico
© 1999-2024 Hardware.com.br. Todos os direitos reservados.