Notifications
Clear all

EXECUTAR A MACRO ANTES DE SALVAR A PLANILHA

19 Posts
2 Usuários
0 Reactions
2,347 Visualizações
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Olá,

Dando continuidade a uma solicitação anterior, gostaria de ver a possibilidade de executar a macro abaixo ao salvar a planilha. Antes esclarecerei as condições para a execução da macro.

1-A planilha já estará criada e salva. A macro não deve solicitar o local de salvamento e o nome.
2-A macro deve apenas formatar o range conforme descrito.
3-A planilha é salva várias vezes durante o uso, e não apenas no fechamento da mesma. Por isso será axecutada antes do salvamento aproveitando o tempo que algumas planilhas salvem o conteúdo.

A macro é:

Sub Format()
'
' Format Macro

    Range("A5:L35").Select
    With Selection.Font
        .Name = "Arial"
        .FontStyle = "Normal"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    Selection.Interior.ColorIndex = xlNone
End Sub

Agradeço a todos!

 
Postado : 14/02/2015 9:06 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Conforme a outra postagem, porque ainda não tentou resolver por meio do evento Before Save?

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 14/02/2015 6:08 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Ok. Tentei de uma forma diferente e funcionou. Eu estava cometendo um erro para implementar a solução.

Mas agora está 99,99% Ok.

Falta uns pequenos detalhes. Primeiro étirar aquele flash na execução da macro e depois, quando a macro encerrar, tirar a seleção do range da tela.

Obrigado!

 
Postado : 16/02/2015 2:24 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Se for o que eu estou pensando, tente assim...


Sub Format()
application.ScreenUpdating = 0
    Range("A5:L35").Select
    With Selection.Font
        .Name = "Arial"
        .FontStyle = "Normal"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    Selection.Interior.ColorIndex = xlNone
    application.ScreenUpdating = 1
End Sub

Att ;)

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/02/2015 3:07 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Oi

O range continua selecionado ao final...

 
Postado : 16/02/2015 4:05 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

E o que você quer? ...será que tu pode explicar?

Seleciona a célula A1

Range("A1").Select

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/02/2015 4:08 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Seguinte,

A formatação é aplicada no range. Logo após a formatação, na tela esse range fica destacado das demais células. Ou seja, não é para ficar destacado. A idéia é que o usuário nem perceba que a macro foi executada. Selecionar uma célula ao final é uma dica. Mas apenas apagar a seleção também é possível...?

 
Postado : 16/02/2015 4:15 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Eu espero que seja isso..

Sub Format()
application.ScreenUpdating = 0
    range("A5:L35").Select
    With selection.Font
        .Name = "Arial"
        .FontStyle = "Normal"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    selection.Interior.ColorIndex = xlNone
    selection.clearcontents 'Apaga o intervalo selecionado
    range("A36").Select 'Seleciona uam celula no final
    application.ScreenUpdating = 1
End Sub

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/02/2015 4:45 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Não !!!
Assim não há razão da macro existir, pois após formatar o intervalo, a macro apaga todo o conteúdo formatado.

Eu me refiro ao oposto do comando:

range("A5:L35").Select

Para aplicar a formatação, o ponto inicial é selecionar o intervalo que vai ser formatado. O que ocorre é que, após a formatação esse intervalo está permanecendo selecionado.

O que imagino é um comando o OPOSTO, tipo

range("A5:L35").UNSelect

Certo?

 
Postado : 16/02/2015 8:04 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Eu sinto muito, eu não posso te ajudar, aguarde os pessoal que entendeu sua dúvida!!!!!!!!!!

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/02/2015 8:12 pm
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Obrigado Alexandrevba,

]á me ajudou.

Antes de desistir, peço que pense o seguinte:

Um usuário deseja que o conteúdo da célula A10 (qualquer conteúdo) tenha a formatação NEGRITO.
Então o usuário SELECIONA a célula A10 e aplica o NEGRITO.
Depois de algum tempo o usuário resolve que não quer mais o negrito.
Então ele seleciona novamente a célula e retira o negrito.

Na macro, para aplicar a formatação, primeiro é elecionado o range. Agora imagine que possamos parar a macro nesse momento !. O que veríamos na tela ?
Veríamos um intervalo de células com uma broda intermitente !
Se dermos continuidade amacro, ela vai fazer as alterações de formatação.
Depois de formatar vamos parar novamente a macro. O que veríamos?
A mesma situação anterior. Um intervalo de células com uma borda intermitente.

É isso o X da questão. Para selecionar o range usa-se

range("A5:L35").Select

E para tirar a borda intermitente ?. O que se usa ?

 
Postado : 16/02/2015 8:29 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Neste caso, sua macro possui a linha

Range("A5:L35").Select

Ao abrir qualquer arquivo , independente da guia, o curso tem que está em algum lugar (em uma célula (geramente), em uma coluna ou linha, na guia inteira).

Então essa barda intermitente, foi feita por sua 1° linha de código, aponte o cursor para outro lugar (eu já postei isso, anteriormente)!!!

Agora, se você está tentando dizer ou quer outra coisa, infelizmente eu não faço menção do que é!

Aguardo o pessoal responder, talvez alguém tem uma dica que resolva.

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 17/02/2015 5:45 am
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Bom dia!

Não tenho muitas intimidades com VBA, então uma pergunta minha a respeito vai parecer bobagem, mas se a gente não perguntar vamos ficar eternamente na ignorância.

Vamos lá! Na manipulação ou na formatação de dados em uma planilha, é essencial saber o que será manipulado ou formatado. Pelo que sei, manipula-se uma célula, uma linha, uma coluna, um conjunto de células ou um conjunto de colunas. Então, o comando para se fazer tudo isso inicia-se com o comando SELECT ou SELECTION.

Na linha a seguir é selecionado o intervalo de linhas e colunas:

Range("A2:L35").Select

Uma área correspondente ao intervalo fica selecionado podendo ser visualizada uma borda, em alguns casos, intermitente.

Minha dúvida é COMO TIRAR A SELEÇÃO?. Não desejo fazer nenhuma manipulação dos dados da área selecionada. Quero apenas tirar o foco, retirar a seleção deste intervalo.

Obrigado.

 
Postado : 18/02/2015 9:22 am
(@luizhcosta)
Posts: 420
Honorable Member
Topic starter
 

Bom dia!

Vou aceitar sua solução, como eu disse, já me ajudou bastante e o resto da dúvida é apenas uma questão de estética! Atendeu a minha dúvida. Mas gostaria de fazer algumas observações, apenas para contribuir para novas soluções.

A solução atende de forma gerenalizada a minha dúvida, mas não especificamente. O range da minha planilha é "A3:BU300".
A rotina de salvar pode acontecer a qualquer momento, não apenas no fechamento da planilha. Logo, digamos que o cursor esteja em qualquer célula, digamos que lá nas ultimas colunas,
adotando a solução apresentada, de selecionar uma célula para retirar a seleção, forçará o usuário a se deslocar até a posição anterior ao salvamento. Por isso a necessidade de tirar a seleção sem ter que selecionar uma célula, como está na solução. Então o mais prático seria retirar a seleção através de um comando oposto, deixando assim o cursor onde ele estava quando a macro foi acionada.

Ou...antes de executar a macro, gravar a posição do cursor e posicionar o cursor nessa posição.

Seria uma possibilidade, certo ?

 
Postado : 18/02/2015 9:54 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Já que tratava-se do mesmo assunto, fundi os 2 tópicos, pois não é permitido criar mais de um tópico para a mesma dúvida.

[]s

Patropi - Moderador

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 18/02/2015 10:06 am
Página 1 / 2