Ir ao conteúdo

Macro para atribuir SIM a POPUP de salvar sobre no Excel


leandrogalinari

Posts recomendados

Postado

Olá pessoal!

Já procurei muito na internet sobre como fazer isso e não encontrei!

Possuo uma macro que salva como planilhas de uma mesma pasta de trabalho. Todos os dias preciso salvar as planilhas atualizadas no mesmo lugar com o mesmo nome, e o excel me pergunta em cada uma delas se eu desejo salvar sobre, porque já existe uma planilha com aquele nome no diretório.

Gostaria de uma marco para atribuir a resposta "Sim" sempre que o excel me perguntar se desejo salvar sobre o arquivo existente. Alguém poderia me ajudar?

Obrigado! Sou fã do fórum.

Postado

sugestão: coloque aqui o código que você está utilizando

Postado

Leandro

Pelo que você descreveu, não é o excel que pede pra sobrescrever, mas o próprio SO, visto que em qualquer programa isso acontece: ao tentar salvar arquivo de mesmo nome sobre outro já existente, a pergunta é padrão.

Por que você não altera a macro para simplesmente 'salvar' ao invés de 'salvar como'?

Postado

Eu não apenas salvo porque as planilhas estão em uma pasta, que contem a macro, e essa pasta separa cada planilha e salva como.

Veja o código que estou usando:

Sub Macro1()

Sheets("plan2").Select

Sheets("plan2").Copy

Sheets("plan2").Select

Sheets("plan2").Name = "plan2"

Range("A2").Select

Application.DisplayAlerts = True

ActiveWorkbook.SaveAs Filename:= _

"C:\plan2.xls" _

, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _

ReadOnlyRecommended:=False, CreateBackup:=False

Savechanges = True

Application.DisplayAlerts = True

Windows("pasta1.xls").Activate

Sheets("plan3").Select

Sheets("plan3").Copy

Sheets("plan3").Select

Sheets("plan3").Name = "plan3"

Range("A2").Select

Application.DisplayAlerts = True

ActiveWorkbook.SaveAs Filename:= _

"C:\plan3.xls" _

, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _

ReadOnlyRecommended:=False, CreateBackup:=False

Savechanges = True

Application.DisplayAlerts = True

Windows("pasta1.xls").Activate

Workbooks("plan2.xls").Close

Workbooks("plan3.xls").Close

Sheets("Plan1").Select

Range("A2").Select

End Sub

Postado

experimente:

Sub Macro1()

Sheets("plan2").Select
Sheets("plan2").Copy
Sheets("plan2").Select
Sheets("plan2").Name = "plan2"
Range("A2").Select
Application.DisplayAlerts = [COLOR="Red"][B]False[/B][/COLOR]
ActiveWorkbook.SaveAs Filename:= _
"C:\plan2.xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
Savechanges = True
[COLOR="Red"][B]'Application.DisplayAlerts = True coloquei apóstrofo inicial, não será executada[/B][/COLOR]
Windows("pasta1.xls").Activate

Sheets("plan3").Select
Sheets("plan3").Copy
Sheets("plan3").Select
Sheets("plan3").Name = "plan3"
Range("A2").Select
[COLOR="Red"][B]'Application.DisplayAlerts = True idem acima, se funcionar, depois poderá deletar as 2 linhas[/B][/COLOR]
ActiveWorkbook.SaveAs Filename:= _
"C:\plan3.xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
Savechanges = True
Application.DisplayAlerts = True
Windows("pasta1.xls").Activate

Workbooks("plan2.xls").Close
Workbooks("plan3.xls").Close

Sheets("Plan1").Select
Range("A2").Select
End Sub

Postado

Iaê, Leandro.

se quiser testar este, é mais rápido (e não 'agita' a sua tela...)

Sub MacroSalvaCópias()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Plan2").Copy
ActiveWorkbook.SaveAs Filename:="C:\plan2.xls"
ActiveWorkbook.Close
Sheets("Plan3").Copy
ActiveWorkbook.SaveAs Filename:="C:\plan3.xls"
ActiveWorkbook.Close
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Postado

beleza Osvaldo! Obrigado.

Uma pergunta: O que fazem os comandos Application.ScreenUpdating = False e Application.DisplayAlerts = False ??

Porque no código que você propôs, primeiro você desativa eles e no final ativa novamente, porque é necessário atribuir TRUE a eles no final?

Abraço!

  • Membro VIP
Postado

Boa noite Leandro

Não entendo nem 1% de VBA do que o Osvaldo entende, mas acho que posso ir adiantando alguma coisa sobre a tua dúvida:

Application.ScreenUpdating = False e Application.DisplayAlerts = False ??

Estes comando evitam que você veja os movimentos da macro na tela. (evita da tela tremer durante a excução da macro).

porque é necessário atribuir TRUE a eles no final?

Porque o comando não deixa aparecer a mensagem do Excel e sempre quando termina a macro é aconselhável voltar ao normal, ou seja, deixar TRUE.

Se faltou alguma coisa, o Osvaldo complementa, pois assim eu tb aprendo mais um pouco.

Abraço

Postado

Aê, Leandro.

É basicamente o que o Patropi comentou.

Por exemplo, no seu código original, ao ser criada uma cópia da Plan2 em um novo arquivo, o foco se transfere para essa cópia e ela se torna a planilha ativa. Isso acontece também na operação seguinte, com a criação de cópia da Plan3.

Em seguida esses novos arquivos são fechados e a planilha ativa muda novamente. Essas operações que mudam o foco e mudam a planilha ativa são desnecessárias para o resultado do código, aumentam o tempo de execução e também provocam 'tremores' e 'tempestades' na tela, o que é desagradável.

Desabilitando essas operações de atualização de tela por meio do comando 'ScreenUpdating' evitam-se os inconvenientes citados.

E sobre o 'DisplayAlerts' esse comando faz o que você procurava, equivale ao 'sim' nas caixas de alerta/diálogo.

Abaixo comentários que copiei da ajuda do VBA. Para acessar a ajuda, no editor de VBA, digite o comando, coloque o cursor em qualquer parte dele e aperte F1.

Comentários- ScreenUpdating

Desative a atualização da tela para acelerar o código da macro. Você não poderá ver o que a macro está fazendo, mas ela será executada mais rapidamente.

Não se esqueça de definir a propriedade ScreenUpdating novamente como True quando a macro terminar.

Comentários - DisplayAlerts

O valor padrão é True. Defina essa propriedade como False se não quiser ser perturbado por solicitações e mensagens de alertas enquanto uma macro está em execução; sempre que uma mensagem exige uma resposta, o Microsoft Excel escolhe a reposta padrão.

Se você definir essa propriedade como False, o Microsoft Excel definirá essa propriedade como True quando o código for concluído, a menos que esteja executando um código de processo cruzado.

Ao usar o método SaveAs para pastas de trabalho para substituir um arquivo existente, o alerta 'Substituir' possui um padrão de 'Não', enquanto a resposta 'Sim' é selecionada pelo Excel quando a propriedade DisplayAlerts é definida como False.

Postado

Osvaldo e Patropi, muito obrigado pela ajuda.

Eu possuo um segundo problema, dessa vez com o outlook. Essas cópias de planilhas que gero através dessa macro eu envio por email, uma para cada endereço, como anexo, em uma outra macro que criei, também no excel.

Essa macro funciona bem, o problema é que o Outlook sempre abre uma janela de Warning, informando que um programa esta tentando enviar uma mensagem em meu nome, e eu preciso clicar em sim em toda mensagem. Isso demora bastante, pois são 23 emails diários. Por isso estou procurando uma solução mas não encontro... Acho que devo criar um novo tópico no fórum, o que vocês acham?

Um forte abraço.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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