Usuário com melhor resposta
AJUDA COM VBA COPIAR MODELO EM OUTRA ABA DA PLANILHA

Pergunta
-
Boa Tarde!
Sub DuplicaERenomeia()
Estou tendo problemas em copiar o modelo na macro.
O código que eu uso é este:
'primeiro, faz a cópia da planilha
Sheets("Plan1").Copy After:=Sheets(ThisWorkbook.Worksheets.Count)
'como foi movida para o final, pega a última
Dim newSheet As Worksheet
Set newSheet = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
newSheet.Name = InputBox("O nome da nova planilha é:", "Renomeando...", newSheet.Name)
MsgBox "Feito!"
End Sub
Porém qual o erro? O meu arquivo se trata de um modelo em que haverá um botão escrito DUPLICAR MODELO
Para que o funcionário somente preencha A CÓPIA DO MODELO que ele criar, para não estragar. O que está acontecendo é que toda vez em que há a duplicação vem o botão e a macro mesclada junta com a planilha, o que não pode acontecer...
Pesquisei bastante na internet, mas pelo jeito estou achando que é um caso "específico", alguém pode me ajudar?
Respostas
-
https://drive.google.com/open?id=0B6uD1lHUpfwrUXF3UVpQZ0hDSjQ
está aqui, não é o arquivo, mas contém a "ideia"
Obrigado desde ja!
Boa noite Vinícius!
Agora entendi bem o que precisa: na verdade o problema está apenas em apagar o botão! Não há multiplicação de código no seu caso, apenas do botão. Para removê-lo é bastante simples:
Sub DuplicaERenomeia() Dim NewSheet As Worksheet, shp As Shape 'primeiro, faz a cópia da planilha ActiveSheet.Copy After:=Sheets(ThisWorkbook.Worksheets.Count) 'como foi movida para o final, pega a última Set NewSheet = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) On Error Resume Next NewSheet.Name = InputBox("O nome da nova planilha é:", "Renomeando...", NewSheet.Name) For Each shp In ActiveSheet.Shapes If shp.Type = msoAutoShape Then 'AutoFormas If shp.Name = "Retângulo: Cantos Arredondados 1" Then 'Para apagar apenas este botão (pode ser suprimido se desejar todos) shp.Delete End If End If Next shp MsgBox "Operação concluída com sucesso!", vbInformation, "Feito!" End Sub
Note que utilizei o nome deste específico botão que forneceu, para evitar apagar eventuais objetos (Retângulos) que sejam necessários. Você pode remover esta parte ou indicar o nome correto do botão desejado no seu caso específico (basta utilizar o "Painel de Visualização de Objetos" - Início>>Localizar e Selecionar>>Painel de Seleção).
Sugiro também que mova seu código para um módulo comum, ao invés de hospedá-lo "dentro da planilha" como você fez. Isso facilita muito a organização do código. Para criar um módulo basta clicar no segundo botão, imediatamente à esquerda do botão de salvar no VBE (Inserir Módulo).
Qualquer dúvida é só avisar.
Filipe Magno
- Marcado como Resposta Vinicius Leonardo sexta-feira, 28 de julho de 2017 15:46
Todas as Respostas
-
Boa noite Vinícius.
Não entendi uma coisa: se você duplica uma Aba, não tem como eliminar o código (imagino que o código faça parte de um módulo comum). Você poderia apagar o botão que é duplicado, mas o código não faz sentido.
É isso? Ou você gostaria de duplicar a aba em outro arquivo e este gostaria que não tivesse Macro?
Abraço.
Filipe Magno
-
Boa Tarde!
Sub DuplicaERenomeia()
Estou tendo problemas em copiar o modelo na macro.
O código que eu uso é este:
'primeiro, faz a cópia da planilha
Sheets("Plan1").Copy After:=Sheets(ThisWorkbook.Worksheets.Count)
'como foi movida para o final, pega a última
Dim newSheet As Worksheet
Set newSheet = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
newSheet.Name = InputBox("O nome da nova planilha é:", "Renomeando...", newSheet.Name)
MsgBox "Feito!"
End Sub
Porém qual o erro? O meu arquivo se trata de um modelo em que haverá um botão escrito DUPLICAR MODELO
Partindo do princípio que o Botão que copias se chama CommandButton1, e se antes de:
MsgBox "Feito"
colocares CommandButton1.delete, não te resolve o problema?
M_A_S_L
-
Boa noite Filipe!
É o seguinte, queria copiar o modelo que está da posição Y:X. Porém a única forma que encontrei até no momento que copia as mesmas proporções do modelo, foi duplicar! Não necessariamente procuro a formula duplicar, entende? porém ela é a que serviu no momento, procuro um código em que copie o modelo, para que possa ser preenchido com o mesmo padrão, mas como percebeu estou tendo o problema quando duplico em que o código fica repetindo-se, o que uma hora vai ficar sobrecarregando o arquivo e é o que eu não busco...
Caso não tenha entendido minha dúvida, posso dar mais explicações!
Atenciosamente,
Vinicius. -
Boa noite Vinicius.
Infelizmente continuo sem entender. Seu código estaria dentro da classe da planilha ao invés de um módulo convencional? Há esta necessidade devido a algum evento que só funcione ali?
Quando você diz "É o seguinte, queria copiar o modelo que está da posição Y:X" não consegui entender.
Se puder postar algumas imagens ou mesmo a pasta de trabalho talvez facilite.
Abraço.
Filipe Magno
-
-
Ola Filipe!
Quando me referi na frase que você colocou em aspas, quis dizer que ela estava em upa posição qualquer, que ela vai ser copiada com as mesmas formatações, mesmas informações etc... eu estou mandando agora um link em que tem um exemplo de como seria o arquivo. É no mesmo tem o botão e o código que enviei aqui e o problema que estou tendo é em relação ao botão, ele não pode vir com o desenho do botão e a macro... Só tem que aparecer a área do modelo.
https://www.4shared.com/s/fOGg_oic1ca
-
-
-
E sem querer abusar muito do senhor, mas já aproveitando haha!
Teria como dar uma atenção, para o meu outro post?
https://social.msdn.microsoft.com/Forums/pt-BR/d3dcc036-52f6-479f-9ba8-82be86026612/ajuda-com-hora-fixa-?forum=vbapt
Estou tendo problemas com este, ja teve resposta, mas o sujeito não procura explicar para quem é leigo como eu...
https://drive.google.com/open?id=0B6uD1lHUpfwrZU5OeWM3WS1VbXc
Grato!
Vinicius Okamoto.
-
https://drive.google.com/open?id=0B6uD1lHUpfwrUXF3UVpQZ0hDSjQ
está aqui, não é o arquivo, mas contém a "ideia"
Obrigado desde ja!
Boa noite Vinícius!
Agora entendi bem o que precisa: na verdade o problema está apenas em apagar o botão! Não há multiplicação de código no seu caso, apenas do botão. Para removê-lo é bastante simples:
Sub DuplicaERenomeia() Dim NewSheet As Worksheet, shp As Shape 'primeiro, faz a cópia da planilha ActiveSheet.Copy After:=Sheets(ThisWorkbook.Worksheets.Count) 'como foi movida para o final, pega a última Set NewSheet = ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count) On Error Resume Next NewSheet.Name = InputBox("O nome da nova planilha é:", "Renomeando...", NewSheet.Name) For Each shp In ActiveSheet.Shapes If shp.Type = msoAutoShape Then 'AutoFormas If shp.Name = "Retângulo: Cantos Arredondados 1" Then 'Para apagar apenas este botão (pode ser suprimido se desejar todos) shp.Delete End If End If Next shp MsgBox "Operação concluída com sucesso!", vbInformation, "Feito!" End Sub
Note que utilizei o nome deste específico botão que forneceu, para evitar apagar eventuais objetos (Retângulos) que sejam necessários. Você pode remover esta parte ou indicar o nome correto do botão desejado no seu caso específico (basta utilizar o "Painel de Visualização de Objetos" - Início>>Localizar e Selecionar>>Painel de Seleção).
Sugiro também que mova seu código para um módulo comum, ao invés de hospedá-lo "dentro da planilha" como você fez. Isso facilita muito a organização do código. Para criar um módulo basta clicar no segundo botão, imediatamente à esquerda do botão de salvar no VBE (Inserir Módulo).
Qualquer dúvida é só avisar.
Filipe Magno
- Marcado como Resposta Vinicius Leonardo sexta-feira, 28 de julho de 2017 15:46
-
E sem querer abusar muito do senhor, mas já aproveitando haha!
Teria como dar uma atenção, para o meu outro post?
https://social.msdn.microsoft.com/Forums/pt-BR/d3dcc036-52f6-479f-9ba8-82be86026612/ajuda-com-hora-fixa-?forum=vbapt
Estou tendo problemas com este, ja teve resposta, mas o sujeito não procura explicar para quem é leigo como eu...
https://drive.google.com/open?id=0B6uD1lHUpfwrZU5OeWM3WS1VbXc
Grato!
Vinicius Okamoto.
Respondi lá!
Abraço.
Filipe Magno
-
-
-
Provavelmente porque o nome do botão foi alterado. Se não tiver outros objetos na planilha basta remover o "If" desta parte. Caso haja, você precisará ver o nome do objeto e inseri-lo no código (basta utilizar o "Painel de Visualização de Objetos" - Início>>Localizar e Selecionar>>Painel de Seleção).
No caso do renomear, note que se não for fornecido nenhum nome ou for um nome inválido (mais de 31 caracteres, nome repetido ou com caracteres inválidos) nada acontece mesmo. Lembre-se que não é permitido, por exemplo, inserir o caractere "/".
Filipe Magno
-