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 betobarreiro
Posts Avatar
#34586
Usando uma rotina para executar macros de outras aplicações, me deparei com a situação descrita nos anexos.
Onde foi que eu errei ?
Por favor, tenho 3641 planilhas que utilizam a macro Emite_Etiquetas.
São utilizadas para identificar para quem vão as refeições dos pacientes do Hospital.
Cada vez que tenho de alterar a Macro tenho de alterar as 3641 planilhas.
Essa rotina seria de grande valia para mim.
A mensagem é: "Não é possível executar a macro 'Dietas do dia 01_ONCOLOGIA.xlsm!Emite_Etiquetas'. Talvez ela não esteja disponível neta pasta de trabalho ou todas as macros estejam desabilitadas."
A macro é executada normalmente nas planilhas; neste caso de chamada da macro que está em outra planilha é que ocorre o erro.
Agradeço sua atenção.
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por gfranco
Avatar
#34589
Boa tarde.
Minha primeira sugestão é tentar unir tudo isso numa única base (com o power query, por exemplo) e rodar uma única macro.
Entretanto, fazendo unicamente o que vc pediu, montei o exemplo que posto no anexo.
Descompacte a pasta zipada.Nela tem 3 arquivos.
2 chamados "teste macro 1 e 2 " e outro chamado "Erro macro excel"
Com os dois primeiros fechados, abra o arquivo "Erro macro excel" e execute a macro "executarMacros" clicando no botão.
Uma janela se abrirá... selecione os 2 primeiros arquivos ( ou apenas 1) e clique em abrir.
Acredito que a leitura desta rotina será suficiente para vc reproduzir no seu cenários real.
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por betobarreiro
Posts Avatar
#34741
Continuo recebendo a mesma msg de erro, mesmo aplicando sua recomendação.
A tabela tem senha; apliquei a senha.
Mas, não quer funcionar.
Avatar do usuário
Por gfranco
Avatar
#34756
Bom dia.
Na adaptação para a sua rotina vc observou a concatenação dos apóstrofos com o nome da pasta- destino assim como eu fiz aqui ?
Application.Run "'" & wbnew.Name & "'!teste"
Observe que eu concatenei o nome da pasta-alvo com um apóstrofo no início e outro no fim.
Avatar do usuário
Por betobarreiro
Posts Avatar
#34917
Não está funcionando como esperado.
Explico:
Eu tenho várias pastas (11). Cada uma contém 31 planilhas (uma para cada dia). Dentro de cada dia, tenho 6 refeições e tenho um VBA para emissão das etiquetas.
Quando "arq" vai buscar o nome do arquivo, ele abre a pasta do dia 01 para usar a macro contida lá.
O que é preciso é que a macro do dia 01 use os dados da planilha do dia 18 que estou querendo imprimir.
Deu prá entender ? Não sei se fui claro.
Talvez, se eu te mandar duas pastas dê para entender melhor.
O que você acha ?
Muito obrigado pela atenção.
Avatar do usuário
Por gfranco
Avatar
#34927
Boa tarde.
Acredito que se vc postar essa pasta de trabalho vai ficar mais claro o entendimento.
Avatar do usuário
Por betobarreiro
Posts Avatar
#35006
Boa tarde,
Como você vai ver, cada planilha tem 11 abas:
01. O que vai ser servido em cada uma das 6 refeições;
02. Planilha que a nutricionista imprime;
03 a 06 as refeições;
07. Os valores e totais do dia;
08. Planilha com o desenho das etiquetas;
09. os setores onde são entregues as refeições
No VBA está a rotina de impressão.
O problema é este: a "Oncologia" e o "SPA" contém a mesma rotina. Quero ter a possibilidade de usar a rotina da "Oncologia" no "SPA". Quando usei a rotina que você me forneceu no "SPA", o VBA abriu e executou a rotina com a tabela da "Oncologia".
Como "chamar" a rotina VBA para ser executada em qualquer planilha ?
Quando usava COBOL, ASSEMBLER ou qq outra linguagem, usava rotinas de "LOAD" e executava uma rotina.
Não dá para fazer isso também com o VBA ?
Abraços,
Barreiro
Você não está autorizado a ver ou baixar esse anexo.
Avatar do usuário
Por gfranco
Avatar
#35021
Boa tarde.
Eu baixei as planilhas e li as macros.
Na minha opinião, será muito mais produtivo estabelecer uma rotina para juntar todas as planilhas de dietas numa única base (tendo uma coluna identificadora de ala/departamento , uma coluna de tipo de dieta e uma de data para poder identificar o dia).
Depois escreve-se uma única macro pra produzir essas etiquetas...
No meu modo de ver, essa é a maneira mais sóbria de resolver. Mas deixe o tópico aberto pois tem outros colaboradores que podem ter opinião diversa da minha.
Com o power query (disponível à partir da versão 2010 do excel) a união de bases iguais é muito simples.
Por osvaldomp
#35048
betobarreiro escreveu: Como "chamar" a rotina VBA para ser executada em qualquer planilha ?
Veja se este caminho pode te ajudar.
É possível criar um arquivo Excel, de nome PERSONAL.XLSB, específico para receber macros que podem ser "chamadas" a partir de qualquer outro arquivo Excel.
O arquivo PERSONAL abre/fecha automaticamente ao abrir/fechar o Excel (ele só aparece no editor de VBA).
Então você colocaria nesse arquivo o seu atual código Emite_Etiquetas, e em seguida mudaria o vínculo dos botões existentes nas 6 planilhas de cada arquivo, que atualmente estão vinculados ao código existente em cada arquivo, para o código colocado no PERSONAL.XLSB. Após, o código Emite_Etiquetas existente em cada arquivo ficaria sem uso pois todas as etiquetas seriam emitidas via código colocado no PERSONAL.

Se você quiser testar este caminho:
Abra qualquer um dos arquivos Excel (por exemplo Dietas do dia 01_SPA.xlsm), caso ainda não exista o arquivo PERSONAL.XLSB no seu Excel (se já existe ele aparece à esquerda na janela do editor de VBA), para inseri-lo basta iniciar uma gravação de macro e na caixa de diálogo Armazenar macro em: escolher Pasta de trabalho pessoal de macros / OK, em seguida finalize a gravação. Assim o arquivo terá sido criado, aparecerá à esquerda na janela do editor de VBA e o Módulo1 conterá uma macro vazia. Basta então copiar o código Emite_Etiquetas do arquivo SPA e colar em substituição à macro vazia. O código Emite_Etiquetas do arquivo SPA pode então ser deletado.

Em seguida será necessário vincular os botões "Emitir Etiquetas" das planilhas à macro agora instalada no PERSONAL.
Se fiz a conta certa são (6 botões por arquivo) x (31 arquivos) x (12 setores) = 2.232 botões para serem vinculados, é isso?

Para facilitar preparei um código que faz a vinculação. Se quiser testar insira um novo módulo no arquivo PERSONAL (duplo clique em PERSONAL / menu Inserir / Módulo) e cole nesse novo módulo o código abaixo. Substitua no código os números 123 pela senha da planilha. Considerei que a senha é igual para as 6 planilhas (a propósito, no futuro, se for necessário disponibilizar planilhas protegidas informe a senha).
Código: Selecionar todos
Sub VinculaMacro()
 Dim f As Shape, ws As Worksheet
  For Each ws In Worksheets(Array("DESJEJUM", "09 HORAS", "ALMOÇO ", "15 HORAS", "JANTAR", "21 HORAS"))
   ws.Protect "123", UserInterfaceOnly:=True
   For Each f In ws.Shapes
    If f.Type = 1 Then f.OnAction = "PERSONAL.XLSB!Emite_Etiquetas"
   Next f
 Next ws
End Sub
Salve e feche o Excel, salve também o PERSONAL. Reabra o arquivo SPA, aperte Alt + F8, escolha VinculaMacro / Executar, em seguida faça o teste com a macro Emite_Etiquetas clicando no botão "Emitir Etiquetas" em cada uma das 6 planilhas.

Se o resultado for o esperado aí é só rodar o código VinculaMacro nos demais trocentos arquivos. Se os nomes dos trocentos arquivos seguem alguma máscara então é possível incrementar o código VinculaMacro para que ele abra cada um dos arquivos e faça a vinculação.
Avatar do usuário
Por betobarreiro
Posts Avatar
#35145
FUNCIONOU !!! :D
Obrigado Osvaldomp.
Vou procurar responder a alguns tópicos da turma.
Acho que minha experiencia com Excel pode ajudar alguém.
Tenha um bom dia.
Até a próxima.
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