Ir ao conteúdo
  • Cadastre-se

Word numeração automática no word para ofícios vb ou macro


Posts recomendados

Preciso de ajuda para resolver um problema com o Word.

O caso é o seguinte: tenho um modelo de formulário criado no Word, no canto superior direito deste formulário tem uma numeração (por exemplo: Ofício 0023/2021), a cada vez que eu imprimo este formulário eu devo alterar esta numeração (0024/2021, 0025/2021,), mas esta alteração é feita de forma manual, tenho um controle do ultimo numero impresso anotado em um papel. Quero saber se é possível automatizar esta numeração usando controles VB, Macro ou de alguma outra forma. Devo também explicar que o numero é composto de duas partes a primeira (antes da barra) é sequencial e a segunda (depois da barra) é o ano.

Agradeço a quem puder me ajudar.

Link para o comentário
Compartilhar em outros sites

Basole, verifiquei o arquivo seu em anexo mas está diferente. Veja imagem no anexo do formato que estou usando.

Eu vi uma postagem aqui no forum de 2002, vou disponibilizar aqui. Porém não consegui entender a construção do arquivo .dot final para executar.

Agradeço pela compreensão.

 

ex.: 

Ofício nº. 0120/2021 – GABINETE07/DR.

Assunto: Reforma do balanço na Rua Pedro Barbosa da Silva, 380 - Jardim Alvorada.

 

Fórumula:

Segue aqui um tutorial de como fazer o seu numerador automático de cartas.

1. Crie um documento com o padrão de suas cartas. No local onde você costuma colocar a numeração, escreva Autonumeração, formatando-a do jeito apropriado e essa palavra será substituída pelo número do documento;

2. Salve esse documento como modelo (.DOT) no diretório apropriado. Esse modelo será sempre utilizado para isso. Pode chamá-lo cartas.dot;

3. Pode fechar esse documento;

4. Abra o normal.dot e copie e cole o código abaixo (tudo o que estiver entre --------------) em um módulo;

4.1 Antes de copiar e colar, altere as linhas necessárias, trocando o caminho onde você grava seus documentos

5. Crie um botão na barra de ferramentas, e associe essa macro (Cartanumerada) a ele;

6. Salve e feche o normal.dot. Feche o Word e reabra. O botão deverá estar lá. Para criar uma nova carta, basta clicar ali.

Fim

Se você já tiver uma numeração em andamento, altere no arquivo cartas.ini, que será criado após a primeira utilização, a linha CartaNum= para o valor apropriado (deverá constar o último número utilizado).

Qualquer dúvida, entre em contato.

Cesar

‘ ------------------------------------------------------------------

Sub Cartanumerada()

On Error GoTo Erro

Documents.Add Template:="cartas.dot"

'  *** Diretórios e arquivos - Faça aqui as alterações necessárias ***

DocDir$ = "c:\Meus Documentos\Pessoais\"  ' onde gravar os docs

ArqIni$ = "c:\Meus Documentos\Pessoais\Carta.Ini"   'onde armazenará o arquivo ini

' Lê o ano no relógio do PC

AnoAtual$ = Year(Now())

' Testa existência do Arquivo INI

If ArquivoExiste(ArqIni$) <> -1 Then   ' Não existe, cria INI

   Call ZeraContagem(AnoAtual$, ArqIni$)

Else ' Existe, testa ano; atualiza INI

   AnoIni$ = System.PrivateProfileString$(ArqIni$, "Contador", "Ano")

   DIf = Val(AnoAtual$) - Val(AnoIni$)

   If DIf > 0 Then        ' Ano novo

       Call ZeraContagem(AnoAtual$, ArqIni$)

   ElseIf DIf < 0 Then    ' Ano andou para trás; pára macro

       MsgBox "Erro no relógio do micro ou arquivo INI adulterado."

       GoTo Fim

   End If

End If

' Lê o número atual no arquivo INI

nuMicrosoft = System.PrivateProfileString$(ArqIni$, "Contador", "CartaNum")

n = Val(nuMicrosoft) + 1    ' soma 1

Valor$ = Right$("000" & n, 3)

' Texto a incluir. Ex: Carta001/98

AnoAtual$ = Right$(AnoAtual$, 2)

NovoTexto$ = "Carta" + Valor$ + "/" + AnoAtual$

' Escreve número no documento

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

With Selection.Find

.Text = "Autonumeração"

.Replacement.Text = NovoTexto$

.Forward = True

.Wrap = wdFindContinue

End With

Selection.Find.Execute Replace:=wdReplaceAll

' Caminho e Nome do arquivo DOC com o número. Ex: Fax001-98.doc

nomedoc$ = DocDir$ + Valor$ + "-" + AnoAtual$ + ".doc"

If ArquivoExiste(nomedoc$) = -1 Then

   MsgBox "O arquivo " + nomedoc$ + " já existe. Operação cancelada."

Else

   ' Salva o arquivo e escreve o número no arquivo INI

   ActiveDocument.SaveAs FileName:=nomedoc$

   System.PrivateProfileString(ArqIni$, "Contador", "CartaNum") = Valor$

End If

GoTo Fim

Erro:

   MsgBox "Não foi possível abrir o Arquivo."

Fim:

End Sub

Function ArquivoExiste(Arq$)

' Testa se o arquivo Arq$ existe

On Error GoTo ArqExiste_Err

Open Arq$ For Input As #1

Close #1

ArquivoExiste = -1    'Existe

GoTo FimArq

ArqExiste_Err:

   ArquivoExiste = 0     'Não Existe

FimArq:

End Function

Sub ZeraContagem(AnoNovo$, Ini$)

' Grava o ano atual, zera a contagem

System.PrivateProfileString(Ini$, "Contador", "Ano") = AnoNovo$

System.PrivateProfileString(Ini$, "Contador", "CartaNum") = "0"

End Sub

' ---------------------------------------------------------

Capturar.JPG

Link para o comentário
Compartilhar em outros sites

Segue exemplo em anexo: 

Ao abrir o arquivo do Word, é incrementado o valor +1,  / (a barra) e o ano atual.

 

image.png.547968f7ead69d86b7cbb32df8c0fa24.png

 

 

E no arquivo de texto é atualizado, no formato: "120" 

 

image.png

* No seu documento original, deve ser inserido um controle de conteúdo, conforme o exemplo em anexo:

                           Sobre controles de conteúdo

 

Exemplo_Numeracao_Automatica.zip

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Perfeito Basole!!
Agradeço pela sua disposição.

Ah um bom tempo que não tenho contato com configurações em macros, já conteúdo até que andei usando um pouco criando alguns formulários mas nada avançado como esse tipo de numeração automática....., mas não estou conseguindo absolver as informações para gerar o arquivo conforme modelo enviado.
Não sei se seria o caso de um passo-a-passo e já antecipando agradecer pela paciência.

Eu abri o arquivo de exemplo enviado, salvei com o número atual 120/2021 e fechei;

Abri novamente para ver se viria com a numeração 121/2021, mas não mudou;

Abri a macro e exclui o atalho na barra (conforme imagem);

Gerei outro botão e cliquei em editar e add 120 no oNum = mas ai deu erro.
 

Vou enviar algumas imagens.
 

InkedOficio Exemplo2_LI.jpg

Oficio Exemplo3.JPG

Oficio Exemplo2.JPG

Oficio Exemplo.JPG

Link para o comentário
Compartilhar em outros sites

@Gueds eu testei várias vezes este exemplo e funcionou 100%.

 

Não sei quais mudanças você fez, mas vendo as imagens que postou me parece que alternou o exemplo mesclando códigos da sua postagem de ontem.

Sendo assim, fica difícil diagnósticar o que está acontecendo. 

Sugiro baixar novamente o meu exemplo, descompactar e abrir o arquivo, que automaticamente a numeração vai alterar para 0121/2021 pois a macro é executada ao abrir o arquivo, sem botões. 

* Lembrando que o arquivo autonure.txt, deve estar na mesma pasta o arquivo de exemplo do word, conforme configuração da macro.

 

Quanto a sua dúvida de como inserir o controle de conteúdos, sugiro acompanhar este vídeo abaixo, para se orientar melhor e no seu documento original, altere este controle para Autonumeraçao em propriedades

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Entendi @Basole

Pode ser que "mexi" demais nas macros e esteja causando conflito.
Vou apagar os botões e comandos e descompactar os arquivos numa pasta específica.

 

Mais tarde volto a postar o resultado..
Agradeço muitíssimo pela atenção e tb pelo vídeo de apoio.

@Basole Pensa numa criança feliz ao ganhar um pode de doce!!! rsrsrs

Provavelmente o que estava gerando conflito era na configuração de habilitar/desabilitar macro. Sempre que abria o documento um aviso para habilitar aparecia.

Entrei na opção e habilitei os recursos para surpresa o arquivo começou a contar....kkk

Muito top!!

Fiz vários testes tipo, salvando ou não salvando ele conta normalmente e no arquivo .txt a contagem acontece normalmente.

No arquivo .txt, depois de fazer vários testes e a numeração estar em 129, eu voltei para 120 (onde está minha numeração real de ofícios), e a contagem continua normalmente a partir do número indicado.

 

Só tenho a lhe agradecer pela paciência e atenção nesse projeto.
Agora vou inserir o logotipo e numeração de páginas para ficar completo.
 

Mais uma vez obrigado amigo!!!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Basole Bom dia!!
Não querendo abusar da sua boa vontade....rs

Só pra constar. Existe alguma forma de bloquear a fórmula para que, após salvar o arquivo com novo nome e precisar abri-lo novamente para uma futura impressão de 2ª via, ele não registre nova numeração ou contagem?

 

Obrigado!!

Link para o comentário
Compartilhar em outros sites

@Gueds @Gueds é possível alterando para um evento BeforeSave, ou seja o incremento da auto numeração só vai acontecer antes de salvar o arquivo. 

 

Ou então você pode inserir um botão e dentro do evento, do botão, você acrescenta o rotina que está dentro da Sub Auto_Open e em seguida excluí está sub. 

E na propriedade deste botão desmarque imprimir o objeto, para não aparecer na impressão.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Gueds Esse procedimento e feito no evento AutoOpen e atende o seu pedido para uma futura impressão de 2ª via.

Segue as alterações: 

 

* Substitua o código abaixo no módulo1 do seu arquivo

 

Sub AutoOpen()
 Dim oNum  As Single
  
   If VBA.MsgBox("Deseja atualizar a numeração novamente?", vbYesNo + VBA.vbQuestion, _
                  "Atenção muita calma nessa hora !") = VBA.vbYesNo Then

          oNum = System.PrivateProfileString(ThisDocument.Path & "\Autonure.txt", "InvNmbr", "oNum")
          
          If oNum = "" Then
            oNum = 1
          Else
            oNum = oNum + 1
          End If
          
          System.PrivateProfileString(ThisDocument.Path & "\Autonure.txt", "InvNmbr", "oNum") = oNum
          
          Word.ActiveDocument.SelectContentControlsByTitle("Autonumeração").Item(1).Range.Text = _
          VBA.Format(oNum, "000#") & "/" & VBA.Format(VBA.Now, "YYYY")
   End If
End Sub

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Desconsidere o código anterior.

 

Este está testado: 

 

Sub AutoOpen()
 Dim oNum
  
   If VBA.MsgBox("Deseja atualizar a numeração novamente?", vbYesNo + VBA.vbQuestion, _
                  "Atenção muita calma nessa hora !") = VBA.vbYes Then

          oNum = System.PrivateProfileString(ThisDocument.Path & "\Autonure.txt", "InvNmbr", "oNum")
          
          If oNum = "" Then
            oNum = 1
          Else
            oNum = oNum + 1
          End If
          
          System.PrivateProfileString(ThisDocument.Path & "\Autonure.txt", "InvNmbr", "oNum") = oNum
          
          Word.ActiveDocument.SelectContentControlsByTitle("Autonumeração").Item(1).Range.Text = _
          VBA.Format(oNum, "000#") & "/" & VBA.Format(VBA.Now, "YYYY")
   End If
End Sub

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Basole Editei o AutoOpen com a nova programação, ele mostra a mensagem se quer atualizar a numeração novamente, mas não está atualizando..
Por gentileza veja as imagens.

Sem essa nova programação está rodando legal, alterando a contagem tranquilo.

1.png

2.png

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

@ana.zampieri como no OneDrive, na atualizacao dos arquivos existe um delay, acredito haverá problemas com 

a sequencia de numeracao do arquivo *.TXT

 

voce pode tentar armazenar o arquivo *.TXT em um servidor em rede,  e em cada documento (Word), no codigo vba, direcionar o endereço (caminho) do respectivo arquivo. 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • mês depois...

Caro Basole, boa noite.

Gostaria de implementar a contagem automática, mas realmente não entendi quase nada dos passos a seguir.

Seria possível detalhar ainda mais o tutorial com prints de cada processo?

Muito obrigado.

 

Link para o comentário
Compartilhar em outros sites

@WalterM bom se for criar um novo documento, a partir do zero,

  voce precisa inserir o controle de conteúdos, o local onde a numeracao será inserida.

     Veja o video abaixo com as dicas:  

 

 

Se for aproveitar o documento (exemplo) que anexei no meu post acima, e caso precise editar.

Siga os passos:

Selecione o controle de conteúdos, em seguida na tab Desenolvedor e        Modo Design (conf. imagem abaixo). 

E depois em propriedades :

 

image.png.9d770982be89b2edaf5df57f0a773c7c.png 

 

Crie um novo documento com extensão *TXT, ou aproveite o exemplo que disponibilizei no post acima, chamado  "Autonure.txt" e altere a numeração inicial, desejada (conf. img. abaixo)

 

image.png

Aperte as Teclas Alt+F11 para acessar o editor vba e altere o local (diretorio), onde estara armazenado o arquivo "Autonure.txt" , (conf. img abaixo, destaque me vermelho) 

        * Caso o arquivo for armazenado na mesma pasta do Documento do Word, não é  necessario alterar 

 

image.png.cdcfb495668c4ca1330e32ac4e0b72d7.png

 

Caso a formatação da sua autonumeração for diferente do exemplo deste topico, ou seja sem o controle anual, edite no codigo  (img. acima) removendo o trecho no codigo vba (em azul) =>  & "/" & VBA.Format(VBA.Now, "YYYY")

 

Ficando desta forma: 

Word.ActiveDocument.SelectContentControlsByTitle("Autonumeração").Item(1).Range.Text = _
   VBA.Format(oNum, "000#")

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Redes-Wi-Fi-capa-3d-newsletter.png

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!