none
AJUDA COM VBA COPIAR MODELO EM OUTRA ABA DA PLANILHA RRS feed

  • Pergunta

  • Boa Tarde!

    Estou tendo problemas em copiar o modelo na macro.
    O código que eu uso é este:

    Sub DuplicaERenomeia()
    '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?

    quarta-feira, 19 de julho de 2017 19:29

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

    sexta-feira, 28 de julho de 2017 02:31

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

    sábado, 22 de julho de 2017 02:09
  • Boa Tarde!

    Estou tendo problemas em copiar o modelo na macro.
    O código que eu uso é este:

    Sub DuplicaERenomeia()
    '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

    domingo, 23 de julho de 2017 15:44
  • 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.

    segunda-feira, 24 de julho de 2017 21:48
  • 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

    terça-feira, 25 de julho de 2017 00:38
  • Ola, não resolveu, ele não deleta, fala que o "objeto é obrigatório"
    terça-feira, 25 de julho de 2017 17:48
  • 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

    terça-feira, 25 de julho de 2017 17:55
  • Vinícius, poderia por gentileza postar o arquivo em um local que não exija cadastro, como o OneDrive, Dropbox ou Google Drive?

    Abraço.


    Filipe Magno

    terça-feira, 25 de julho de 2017 23:59
  • https://drive.google.com/open?id=0B6uD1lHUpfwrUXF3UVpQZ0hDSjQ

    está aqui, não é o arquivo, mas contém a "ideia"

    Obrigado desde ja!

    quinta-feira, 27 de julho de 2017 20:47
  • 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.

    quinta-feira, 27 de julho de 2017 20:52
  • 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

    sexta-feira, 28 de julho de 2017 02:31
  • 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

    sexta-feira, 28 de julho de 2017 02:44
  • Filipe! Fui testar o código novamente e não apagou o retângulo que forneci

    sexta-feira, 28 de julho de 2017 16:32
  • E filipe, o código não está mais renomeando tbm...

    Atenciosamente,

    Vinicius Okamoto

    sexta-feira, 28 de julho de 2017 16:36
  • 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

    sexta-feira, 28 de julho de 2017 16:40
  • Funcionou com a retirada do If, Muito obrigado, já está nos padrões que eu queria! Obrigado pela força!

    Vinicius Okamoto

    sexta-feira, 28 de julho de 2017 16:51