Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
  • Avatar do usuário
Avatar do usuário
Por Jore
Posts Avatar
#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.
Avatar do usuário
Por Strogonoff
Posts Avatar
#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
Posts Avatar
#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
Posts Avatar
#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!!
Avatar do usuário
Por Strogonoff
Posts Avatar
#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
Avatar do usuário
Por Strogonoff
Posts Avatar
#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
Posts Avatar
#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
Avatar do usuário
Por Strogonoff
Posts Avatar
#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
Avatar do usuário
Por Strogonoff
Posts Avatar
#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
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord