Contador no Excel

1

Meu arquivo tem 50 folhas dentro, que cada folha é um formulário padrão. Deixa o nome como Form1, Form2, Form3.

Eu quero criar uma folha de impressão, onde eu selecione qual formulário eu quero ver, para que eu não precise navegar entre a planilha para encontrar o desejado. E eu quero ter contador nesta folha de impressão que conta toda vez que eu enviar para uma impressora.

O que eu fiz até agora? Eu 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 toda a planilha 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.

Depois de escolher o formulário selecionado, preciso inserir um número de ID da minha empresa e, em seguida, imprimi-lo.

Gostaria de saber se é possível criar um contador nesta folha que conte quantas vezes imprimi ... Ou qualquer coisa que conte em ordem cronológica quando salvo ou mudo alguma coisa ...

    
por vitor 02.06.2015 / 20:14

2 respostas

1

Todos os seus pedidos podem ser atendidos. Mas só usando o VBA eu tenho medo.

Mantenha o menu suspenso, mas adicione um botão que aciona uma macro.

Na macro, leia a célula com o menu suspenso e envie a folha apropriada para impressão. Em seguida, atualize o contador apropriado que pode estar em um conjunto de células na mesma página que o botão suspenso e o botão.

Para contar o número de salvamentos, você precisa de uma macro na qual a função before_save. Você precisa procurar por isso, acho que pode até haver um artigo sobre isso no meu blog, não me lembro, faz alguns anos desde que o fiz. O principal é o mesmo da macro anterior, em que você simplesmente adiciona 1 à célula apropriada.

    
por 02.06.2015 / 20:36
0

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 para

=INDIRECT($M$1 & "!A1")

que cria uma string de texto que parece o nome qualificado da célula que você deseja ver e, em seguida, usa a função INDIRECT() para desassociar essa cadeia (isto é, tratá-lo 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) quando você adiciona Form51 . Advertências:

  • Isso pode fazer com que o Excel faça muito trabalho (isto é, gastar muito tempo) "recalculando" essas células indiretas sempre que qualquer coisa for alterado (não apenas M1 ). Não tenho certeza se seria pior do 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 ser capaz de se proteger de tais acidentes protegendo a folha de impressão.

Existem outras maneiras de construir a folha de impressão; por exemplo, usando VBA para

  • crie uma função definida pelo usuário que pode substituir a chamada INDIRECT() , mas operar mais suavemente, ou
  • copia todos os dados de Formnn para a folha de impressão sempre que você alterar M1 .

Você pode contar as alterações escrevendo uma rotina Worksheet_Change VBA.

Não conheço nenhuma maneira de a lógica da folha poder contar / detectar quando você imprimi-lo. No entanto, você pode conseguir o efeito desejado escrevendo uma rotina de impressão no VBA. Um

PrintOut , , , True

declaração irá imprimir a folha para você; adicione quaisquer outras ações desejadas (por exemplo, incrementar um contador). (Você só precisa se lembrar de imprimir usando essa macro .) O quarto parâmetro para PrintOut é Visualizar , definido como True fazer com que o Microsoft Excel invoque a pré-visualização da impressão antes de imprimir a folha (dando-lhe assim a opção de cancelar) ou False (ou omitido) para imprimir a folha imediatamente, incondicionalmente.

Veja Como adiciono o VBA no MS Office? para informações sobre, bem, você sabe.

    
por 03.06.2015 / 01:05