Notifications
Clear all

Macro para realizar: Copiar e Colar Especial só Valores

14 Posts
2 Usuários
0 Reactions
3,053 Visualizações
(@georgevbs)
Posts: 30
Eminent Member
Topic starter
 

Olá, Pessoal

Gostaria de simplificar esse código que foi feito pela gravação do macro do excel.
O objetivo é o seguinte. Tenho um conjunto de células mescladas "K2:M4" com a fórmula "=HOJE(). Com isso é mostrado uma data ex:24/04/2013. Quando acionar o botão da macro gostaria que o valor das células mescladas "K2:M4"fosse mantido, sem precisar da fórmula "=HOJE()".
Para fazer isso fiz um processo em 3 passos. 1° - Selecionei as células já mescladas "K2:M4" e copiei; 2° - Fiz um cola especial com valores e apertei ENTER, mas a mesma não manteve a forma, por isso fiz o 3° etapa; 3° - apertei o botão mesclar.
Esse processo ficou com o seguinte código:

Range("K2:M4").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Paste
    Application.CutCopyMode = False
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge

Já fiz uma pesquisas no fórum e encontrei algumas coisas relacionadas, mas não achei uma solução adequada para o meu caso.

 
Postado : 24/04/2013 5:57 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente:

Sub Mantem()
Range("K2").Value = Range("k2")
End Sub
 
Postado : 24/04/2013 6:03 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Eu não entendi...

Sub AleVBACopiar()
   Worksheets("Sheet1").Range("K2:M4").Copy
    Worksheets("Sheet1").Range("K2:M4").PasteSpecial Paste:=xlPasteValues
   Application.CutCopyMode = False
End Sub
 
Postado : 24/04/2013 6:08 pm
(@georgevbs)
Posts: 30
Eminent Member
Topic starter
 

Boa noite, Reinaldo e alexandrevba. Obrigado pela ajuda.

Reinado, seu código funcional perfeitamente. Foi mais que perfeito uheuheuhe.

Abraços

 
Postado : 24/04/2013 6:18 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Considerando que resposta do Reinaldo, resolve sua questão, lembre se de marcar sua postagem como resolvido!

Att

 
Postado : 24/04/2013 6:28 pm
(@georgevbs)
Posts: 30
Eminent Member
Topic starter
 

Experimente:

Sub Mantem()
Range("K2").Value = Range("k2")
End Sub

Reinaldo, só mais uma dúvida. Percebi que se a planilha (e as respectivas células) está bloqueado dá um erro na execução da macro. Como resolvo esse problema? Ou seja, as minhas células estão bloqueadas para que o usuário não altere a informação, sendo assim, como eu executo a macro que vc me forneceu?

Abraços.

 
Postado : 24/04/2013 7:27 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Tente

Private Sub Worksheet_Activate()
Me.Unprotect Password:="SuaSenha"
Application.ScreenUpdating = False

    'SuaMAcro

Application.ScreenUpdating = True
Me.Protect Password:="SuaSenha"
End Sub
 
Postado : 24/04/2013 7:38 pm
(@georgevbs)
Posts: 30
Eminent Member
Topic starter
 

Boa noite!!

Tente

Private Sub Worksheet_Activate()
Me.Unprotect Password:="SuaSenha"
Application.ScreenUpdating = False

    'SuaMAcro

Application.ScreenUpdating = True
Me.Protect Password:="SuaSenha"
End Sub

Desculpe o incômodo, mas não consegui executar o comando dentro de uma macro. Como eu faço para executar dentro dessa macro "Sub Novo()"?

Sub Novo()

Private Sub Worksheet_Activate()
Me.Unprotect Password:="shalon187"
Application.ScreenUpdating = False

    'SuaMAcro

    Range("K2").Value = Range("K2")
    
    Range("I94").Value = Range("I94")

Application.ScreenUpdating = True
Me.Protect Password:="shalon187"
End Sub
  
End Sub
 
Postado : 24/04/2013 7:55 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Tente por o código dentro do corpo de código da planilha e não do módulo!

Att

 
Postado : 24/04/2013 7:59 pm
(@georgevbs)
Posts: 30
Eminent Member
Topic starter
 

Valeu! Obrigado pela força.

 
Postado : 24/04/2013 8:08 pm
(@georgevbs)
Posts: 30
Eminent Member
Topic starter
 

Colegas, obrigado pela ajuda. O código funcionou quando tirei do módulo e coloquei no Microsoft Excel Objetos(Plan2). Mas ocorreu um efeito colateral: Dá um erro 1004 (Em tempo de execução: Erro de definição de aplicativo ou de definição de objeto) ao executar o comando "Range("A2").Select" até "Windows("MODELO - PEDIDO 20131").Activate"

Esse código funciona bem dentre do módulo, mas no Microsoft Excel Objetos(Plan2) deu esse erro. Alguma sugestão?

Sub Novo()
    Range("C8:G8").Select
    Selection.ClearContents
        
    Workbooks.Open Filename:="C:UsersClienteDocuments6 - ShalonPEDIDOnumeração.xlsx"
    Range("A2").Select
    ActiveCell.FormulaR1C1 = Range("A2") + 1
    ActiveWorkbook.Save
    ActiveWindow.Close
    Windows("MODELO - PEDIDO 20131").Activate
    
    Me.Unprotect Password:="123456"
    Application.ScreenUpdating = False

    'SuaMAcro

    Range("K2").Value = Range("K2")
    Range("I94").Value = Range("I94")
    Range("N8").Value = ""

    Me.Protect Password:="123456"
    Application.ScreenUpdating = True
    
    Sheets("PEDIDO 2013").Shapes("Botão 78").Visible = False
    Sheets("PEDIDO 2013").Shapes("Botão 13").Visible = True
End Sub
 
Postado : 27/04/2013 12:10 pm
(@georgevbs)
Posts: 30
Eminent Member
Topic starter
 

Tem como eu criar um comando para que essa macro Sub Novo() execute uma macro dentre de um módulo?

No caso, eu colocaria esse código em uma macro dentre de um módulo:

Workbooks.Open Filename:="C:UsersClienteDocuments6 - ShalonPEDIDOnumeração.xlsx"
Range("A2").Select
ActiveCell.FormulaR1C1 = Range("A2") + 1
ActiveWorkbook.Save
ActiveWindow.Close
Windows("MODELO - PEDIDO 20131").Activate

E mandaria executar, através de uma comando, a partir da macro Sub Novo() que está alocada no código da planilha "Microsoft Excel Objetos(Plan2)"

 
Postado : 27/04/2013 12:24 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Crie a rotina no modulo, e no local onde pretenda executa-la utiliza a expressão Call nomedesuarotina

 
Postado : 27/04/2013 12:33 pm
(@georgevbs)
Posts: 30
Eminent Member
Topic starter
 

Vleu, brigadão. Funcionou com o comando

Application.Run ("numeracao")

 
Postado : 27/04/2013 1:02 pm