Meu arquivo contém 50 folhas, sendo cada folha um formulário padrão. Vamos nomear como Form1, Form2, Form3.
Quero criar uma planilha de impressão, onde seleciono qual formulário quero ver, para não precisar navegar entre planilhas para encontrar a desejada. E eu quero ter um contador nessa folha de impressão que conte toda vez que eu envio para uma impressora.
O que eu fiz até agora? Criei esta fórmula, onde M1 é uma lista suspensa com os nomes dos formulários. Portanto, se eu quiser ver o Form2, seleciono Form2 na lista suspensa e a fórmula exibe todas as planilhas do Form2.
=IF($M$1="Form1";IF('Form1'!A1="";"";'Form1'!A1);"")&IF($M$1="Form2";IF('Form2'!A1="";"";'Form2'!A1);"")&IF($M$1="Form3";IF('Form3'!A1="";"";'Form3'!A1);"")
Está funcionando bem, porque todos os formulários são padronizados.
Após escolher o formulário selecionado, preciso inserir um número de identificação da minha empresa e depois imprimi-lo.
Gostaria de saber se é possível criar um contador nesta planilha que conte quantas vezes imprimi... Ou algo que conte em ordem cronológica quando eu salvar ou alterar alguma coisa...
Responder1
Todos os seus pedidos podem ser atendidos. Mas receio apenas usando VBA.
Mantenha o menu suspenso, mas também adicione um botão que acione uma macro.
Na macro, leia a célula com o menu suspenso e envie a planilha apropriada para impressão. Em seguida, atualize o contador apropriado, que pode estar em um conjunto de células na mesma página do menu suspenso e do botão.
Para contar o número de salvamentos, você precisa de uma macro com a função before_save. Você precisa pesquisar isso, acho que pode até ter um artigo sobre isso no meu blog, não me lembro, já faz alguns anos que não faço isso. O principal é o mesmo da macro anterior, bastando adicionar 1 à célula apropriada.
Responder2
Uma maneira um pouco mais limpa de construir a “folha de impressão” que mostrará o conteúdo de uma das outras 50 folhas é definir a célula A1
como
=INDIRECT($M$1 & "!A1")
que cria uma string de texto que se parece com o nome qualificado da célula que você deseja ver e, em seguida, usa a INDIRECT()
função para desreferenciar essa string (ou seja, para tratá-la como um endereço de célula e recuperar o conteúdo da célula identificada) . Com isso, você não precisará alterar sua(s) fórmula(s) ao adicionar Form51
. Avisos:
- Isso pode fazer com que o Excel trabalhe muito (ou seja, gaste muito tempo) “recalculando” essas células indiretas sempre quequalquer coisamudanças (não apenas
M1
). Não tenho certeza se seria pior do que o que você tem agora. - Evite a tentação de alterar dados ou inserir novos dados na “folha de impressão” quando quiser atualizar
Form42
. (Claro, você tem esse problema agora.) Você pode se proteger de tais acidentes protegendo a folha impressa.
Existem outras formas de construir a folha de impressão; por exemplo, usando VBA para
- criar uma função definida pelo usuário que possa substituir a
INDIRECT()
chamada, mas operar de maneira mais suave, ou - na verdade, copie todos os dados para a planilha de impressão sempre que você alterar .
Formnn
M1
Você pode contar as alterações escrevendo uma Worksheet_Change
rotina VBA.
Não conheço nenhuma maneira de a lógica da planilha poder contar/detectar quando você a imprime. No entanto, você pode conseguir o efeito desejado escrevendo uma rotina de impressão em VBA. A
PrintOut , , , True
extrato imprimirá a planilha para você; adicione quaisquer outras ações desejadas (por exemplo, incrementar um contador). (Você só precisa se lembrar de imprimirusando esta macro.) O quarto parâmetro PrintOut
éVisualização, definido como True
para que o Microsoft Excel invoque a visualização da impressão antes de imprimir a planilha (dando a você a opção de cancelar) ou False
(ou omitir) para imprimir a planilha imediatamente, incondicionalmente.
VerComo adiciono VBA no MS Office? para obter informações sobre, bem, você sabe.