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
Por JNilson
Posts
#47358
Amigos, boa tarde.

Tenho uma pasta de trabalho com 5 planilhas. Quero salvar a planilha A, por exemplo, em uma nova pasta de trabalho. Para isso, estou usando a macro abaixo. Ela funciona bem. Ocorre que a planilha salva na nova pasta de trabalho está ficando com os vínculos das macros da planilha de origem. Queria salvar a planilha em nova pasta, mas sem os vínculos das macros. Quando acionamos a macro na nova planilha, que foi salva em nova pasta, ela abre a planilha originária para executar o código.

Sei que há possibilidade de abrir a nova planilha e, no menu dados, quebrar os vínculos, mas queria que a macro abaixo fizesse isso automaticamente. Vi em alguns grupos a recomendação para salvar com a extensão .xlsx, mas não funcionou. Obrigado pela ajuda.

Sub SalvarAba()

'Essa macro salva a planilha ativa como uma nova pasta

'Impede que o Excel atualize a tela
Application.ScreenUpdating = False
'Impede que o Excel exiba alertas
Application.DisplayAlerts = False

'Seta uma variável para se referir a nova pasta de trabalho
Dim NovoWB As Workbook
'Cria esta nova aba
Set NovoWB = Workbooks.Add(xlWBATWorksheet)
With NovoWB
'Copia a aba atual para o novo arquivo, como a segunda aba
ThisWorkbook.ActiveSheet.Copy After:=.Worksheets(.Worksheets.Count)
'Deleta a primeira aba do arquivo criado (Aba em branco)
.Worksheets(1).Delete
'Salva o novo arquivo para a mesma pasta do arquivo atual
'Troque "Novo Arquivo" para um outro nome qualquer que preferir
'.SaveAs ThisWorkbook.Path & "\Novo Arquivo.xlsx"
'Fecha o novo arquivo
'.Close False
End With

Application.Dialogs(xlDialogSaveAs).Show
'Application.Dialogs(xlDialogclose).Show
closed = True
'Permite que o Excel volte a atualizar a tela
Application.ScreenUpdating = True
'Permite que o Excel volte a exibir alertas
Application.DisplayAlerts = True
End Sub
Avatar do usuário
Por Jimmy
Avatar
#47373
Olá,

Você poderia anexar a planilha para vermos onde estão esses links, se em botões, eventos, etc?

Jimmy San Juan
Por JNilson
Posts
#47383
Oi Jimmy, boa noite.

Infelizmente não posso postar a planilha, pois ela contém dados do trabalho. Aciono as macros da planilha originária por meio de botões que criei com CAIXAS DE TEXTO. Então, a nova planilha, que é copiada para outra pasta de trabalho, mantém essas caixas de texto (que são os botões de acionar as macros) com os vínculos das macros da planilha originária. Se clico na caixa de texto, o código abre a planilha originária para poder rodar.

Na planilha copiada (nova pasta de trabalho), consigo quebrar esses vínculos por meio do menu DADOS, EDITAR LINKS. Gostaria que a cópia do arquivo fosse criada sem esses vínculos.

Grato.
Avatar do usuário
Por Jimmy
Avatar
#47400
Nilson, bom dia!

Ok, entendido.

Inclua o código abaixo logo antes da instrução closed = True
Código: Selecionar todos
For Each Figura In ActiveSheet.Shapes
    OA = Figura.OnAction
    If OA <> "" Then Figura.OnAction = ActiveWorkbook.Name & "!" & _
                                       Mid(OA, InStr(OA, "!") + 1)
Next
A questão de salvar como XLSX não resolve seu problema, ao contrário. Salvar como XLSX significa dizer ao Excel que nessa pasta de trabalho você não quer macros, logo, não é o que você quer.

Teste e dê retorno.

Peço que dê seu like (ícone da mãozinha do lado direito da tela) nas mensagens que de alguma forma participaram da solução.

Jimmy San Juan
Por JNilson
Posts
#47415
Boa noite, Jimmy. Infelizmente não funcionou. Rodei o código linha por linha (F8), e observei que o código que você enviou é executado diversas vezes, mas os vínculos das macros não são eliminados da planilha criada. A pasta de trabalho é salva sem nenhuma macro, mas é possível chamar as macros da planilha originária pelos botões da planilha criada. Muito obrigado pela atenção.
Avatar do usuário
Por Jimmy
Avatar
#47437
Nilson,

O código que te passei procura por objetos como botões, por exemplo, e altera a macro. Por se tratar de um FOR/NEXT é normal que ele execute vários cíclos, dependendo da quantidade de objetos.

Se os vínculos não estão sendo alterados, é provável que hajam outros, fora dos objetos da planilha.

Eu não sei se há objetos que não tem macros, ou se só tem as caixas que acionam macros. Para saber isso teria que ter a planilha na mão.

Sugiro que você apague os dados de trabalho e envie a planilha apenas com os botões / caixas / figuras / etc, para que eu possa avaliar.

Acho que dessa forma chegaremos a uma solução mais rápido e de forma mais eficiente.

Peço que dê seu like (ícone da mãozinha do lado direito da tela) nas mensagens que de alguma forma participaram da solução.

Jimmy San Juan
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