Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Avatar do usuário
Por Jore
#59961
Olá amigos,
Tenho que criar um macro que copie toda a aba atual!
Encontrei um código que quase resolve o meu problema, porém por faltam pequenos detalhes, mas como eu não tenho o conhecimento não consigo resolver os detalhes que faltam.
Só falta arrumar para este código copiar a planilha atual e não apenas uma específica. E se eu clicar em Cancelar ele abortar. O código que esta no exemplo cria a planilha mesmo se eu clicar em cancelar.

link do exemplo: http://www.tomasvasquez.com.br/forum/vi ... .php?t=811
Espero que possam me ajudar!
Um abraço e Obrigado !
Você não está autorizado a ver ou baixar esse anexo.
Por Strogonoff
#59972
Boa Noite,
Não entendi direito a sua questão, porém dei uma alterada na planilha e copiará o nome das planilhas na planilha...
Cheguei perto?
Caso contrário, preciso de uma melhor explicação do que deseja...
Abraço
Você não está autorizado a ver ou baixar esse anexo.
Jore agradeceu por isso
Avatar do usuário
Por Jore
#59990
@Strogonoff, Bom dia!
Desculpa se eu não soube explicar bem!
O código já esta quaaase pronto kkk kkk
Na verdade eu preciso que ao clicar no botão de "Criar aba", a Aba/Planilha que eu estiver seja copiada. No código que está nesta planilha sempre que eu clico no botão a aba copiada é a mesma.
Vou tentar exemplificar melhor kkk
Imagina que estou na Planilha1.
Quando eu clicar no botão "Criar aba", ele irá copiar toda a Planilha1 e eu vou dar um nome qualquer... No exemplo aqui o nome será Planilha2, para a nova aba.
Agora na Planilha2, se eu clicar em "Criar aba", a Planilha copiada ainda é a Planilha1 e não é isso que eu quero!
Resumindo, se eu estiver na Planilha1 e clicar em "Criar aba", quero que copie a Planilha1. Se eu estiver na Planilha2 e clicar em "Criar aba", quero que copie a Planilha 2, Se eu estiver na Planilha3 e clicar em "Criar aba", quero que copie a Planilha 3... Sempre copie a planilha que eu clicar no botão "Criar aba".

Veja que lá no código tem uma linha onde eu especifico apenas uma planilha que será copiada. E eu preciso que copie a planilha atual que eu estiver e não a mesma sempre.
Código: Selecionar todos
'Define que a Planilha1 será copiada
Set wsTag = Sheets("Planilha1")
Espero que eu tenha explicado melhor e Muito obrigado por me ajudar!!
Por osvaldomp
#60003
Substitua
Set wsTag = Sheets("Planilha1")

por
Set wsTag = ActiveSheet
Jore agradeceu por isso
Avatar do usuário
Por Jore
#60007
@Strogonoff,
Era isso mesmo!
Agora para finalizar, tem como cancelar a operação se eu clicar no botão cancelar?
Imagem

Muito obrigado por toda a ajuda!!
Por Strogonoff
#60008
Jore escreveu: 27 Out 2020 às 12:59 @Strogonoff,
Era isso mesmo!
Agora para finalizar, tem como cancelar a operação se eu clicar no botão cancelar?
Imagem

Muito obrigado por toda a ajuda!!
essa é mais fácil
a boa e velha função IF
nomeplanilha = inputbox(tudo o que você fez)
if nomeplanilha = vbcancel then exit sub
end if
Jore agradeceu por isso
Por Strogonoff
#60009
Essa você não perguntou, mas é imprecidivel...

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
MsgBox " Operação não realizada" & Chr(13) & _
"Favor apertar o botão <SAIR>", , "A T E N Ç Ã O "
End If
End Sub

essa rotina coloque em seus forms para inibir que a pessoa sai pelo X que fica acima e direita do Form, ela será obrigada a clicar no botão Sair, que poderá ter mais rotinas do que fechar o form e assim você tem o controle sobre o seu formulário.
Espero ter ajudado...
Precisando estamos a disposição
Abraço
AfonsoMira, Jore agradeceu por isso
Avatar do usuário
Por Jore
#60010
@Strogonoff,

Muito obrigado por toda a ajuda!!
Mas não sei onde por o If

[/quote]
essa é mais fácil
a boa e velha função IF
nomeplanilha = inputbox(tudo o que você fez)
if nomeplanilha = vbcancel then exit sub
end if[/quote]@Strogonoff,
Código: Selecionar todos
Sub NovaPlanilhaInputbox_Jore()
Dim wshNovaPlan As Worksheet
Dim wsTag As Worksheet
Dim i As Integer

'Define a Planilha TAG, TAG é o nome da planilha
Set wsTag = ActiveSheet
'Se quiser que abra uma planilha específica ponha:Set wsTag = Sheets("nome da planilha")

'Congela a tela
Application.ScreenUpdating = False

'Nome da nova Sheet
nome = InputBox("Informar nome da nova planilha") 'solicita o nome da nova planilha
    On Error Resume Next

        'Conta qde de Planilhas
        i = Worksheets.Count
        
        'Copia a Planilha atual ou uma especifica após a última aba
        wsTag.Copy After:=Worksheets(i)
        i = i + 1
                
    'Declaramos a Nova Planilha e Renomeamos
    Set wshNovaPlan = Worksheets(i)
    With wshNovaPlan
            .Name = nome
            .Range("A1").Select
    End With
 
        'Nocaso de ter Fórmulas e quiser só os valores utilizamos as linhas abaixo
        'Copia a Planilha Ativa e cola sem as formulas
        With wshNovaPlan.UsedRange
            .Copy
            .PasteSpecial Paste:=xlValues
            .Range("A1").Select
        End With
        
        Application.CutCopyMode = False

End Sub
Por Strogonoff
#60011
Jore escreveu: 27 Out 2020 às 14:07 @Strogonoff,

Muito obrigado por toda a ajuda!!
Mas não sei onde por o If
essa é mais fácil
a boa e velha função IF
nomeplanilha = inputbox(tudo o que você fez)
if nomeplanilha = vbcancel then exit sub
end if[/quote]@Strogonoff,
Código: Selecionar todos
Sub NovaPlanilhaInputbox_Jore()
Dim wshNovaPlan As Worksheet
Dim wsTag As Worksheet
Dim i As Integer

'Define a Planilha TAG, TAG é o nome da planilha
Set wsTag = ActiveSheet
'Se quiser que abra uma planilha específica ponha:Set wsTag = Sheets("nome da planilha")

'Congela a tela
Application.ScreenUpdating = False

'Nome da nova Sheet
nome = InputBox("Informar nome da nova planilha") 'solicita o nome da nova planilha
    On Error Resume Next

        'Conta qde de Planilhas
        i = Worksheets.Count
        
        'Copia a Planilha atual ou uma especifica após a última aba
        wsTag.Copy After:=Worksheets(i)
        i = i + 1
                
    'Declaramos a Nova Planilha e Renomeamos
    Set wshNovaPlan = Worksheets(i)
    With wshNovaPlan
            .Name = nome
            .Range("A1").Select
    End With
 
        'Nocaso de ter Fórmulas e quiser só os valores utilizamos as linhas abaixo
        'Copia a Planilha Ativa e cola sem as formulas
        With wshNovaPlan.UsedRange
            .Copy
            .PasteSpecial Paste:=xlValues
            .Range("A1").Select
        End With
        
        Application.CutCopyMode = False

End Sub
[/quote]
faltou essa linha...
Dim nome As String

você esqueceu de declarar a variável...
coloque essa linha que rodará, ja testei aqui
Jore agradeceu por isso
Por Strogonoff
#60019
Jore escreveu: 27 Out 2020 às 22:07 @Strogonoff,
Imagem
Coloquei a linha que você falou e mesmo assim esta dando erro...
Desculpa a minha ignorância :roll: :roll:
olá boa noite...
Aqui estamos todos aprendendo..
Não precisa pedir desculpas, com um pouco de prática, você estará também ajudando e dividindo suas experiências..
Refiz o código..
Sub NovaPlanilhaInputbox_Jore()
Dim wshNovaPlan As Worksheet
Dim wsTag As Worksheet
Dim i As Integer
Dim nome As String

On Error Resume Next ' Sempre coloque aqui em cima essa declaração e não no meio, combinado?
' Ela significa que se tiver um erro ela passa para a próxima instrução ou macro, então coloque ela sempre após declarar as ' variáveis

'Define a Planilha TAG, TAG é o nome da planilha
Set wsTag = ActiveSheet
'Se quiser que abra uma planilha específica ponha:Set wsTag = Sheets("nome da planilha")

'Congela a tela
Application.ScreenUpdating = False

'Nome da nova Sheet
nome = InputBox("Informar nome da nova planilha", "ATENÇÃO") 'solicita o nome da nova planilha
If nome = vbCancel Then
Exit Sub ' dependendo da versão tem que ir para a linha de baixo, desculpa.... Esqueci esse detalhe
End If

'Conta qde de Planilhas
i = Worksheets.Count

'Copia a Planilha atual ou uma especifica após a última aba
wsTag.Copy After:=Worksheets(i)
i = i + 1

'Declaramos a Nova Planilha e Renomeamos
Set wshNovaPlan = Worksheets(i)
With wshNovaPlan
.Name = nome
.Range("A1").Select
End With

'Nocaso de ter Fórmulas e quiser só os valores utilizamos as linhas abaixo
'Copia a Planilha Ativa e cola sem as formulas
With wshNovaPlan.UsedRange
.Copy
.PasteSpecial Paste:=xlValues
.Range("A1").Select
End With

Application.CutCopyMode = False

End Sub
Jore agradeceu por isso

Segue uma ideia, veja se aproveita. 1. elabore um[…]

Pessoal, ao salvar minha tabela dinâmica no […]

DÚVIDA: Como gerar a data final?

Isso mesmo Strogonoff, muito obrigado! Sobre a su[…]

Variáveis em um Dashboard

Você precisa de um gráfico dinâ[…]

Bom dia! Estou precisando de uma ajuda com SQL e V[…]

Como você não informou o horár[…]

Como abrir tela de Logon do SAP ECC?

@FAMenezes , Tudo bom... sei que já faz um[…]

Rotina e Macro

Oi. Tenho uma planilha com um jogo. Nele os partic[…]