Contatore incrementale word



  • Contatore incrementale word
    di Ikarus (utente non iscritto) data: 02/01/2017 01:36:37

    Salve a tutti
    Premetto che sono abbastanza nuovo nel mondo delle macro.
    Sto realizzando un contatore che incrementi il suo valore di 1 ad ogni stampa.
    Una volta eseguita la macro questa stampa 25 copie incrementando per ogni pagina il valore a piè di pagina aggiungendo 1 e fino a quì tutto ok.
    Il problema è che se rieseguo la macro torna a contare da 1 e finisce a 25.
    Vorrei che l'ultimo valore fosse memorizzato e continuasse a contare da dove si era fermato.

    Spero di essermi spiegato decente.
    Ringraziandovi anticipatamente aspetto vostre risposte.


     
    Sub contatore()
    Dim i As Integer
    Dim numero_documento As Integer
    For i = 1 To 25
    numero_documento = numero_documento + 1
    With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
    .Text = "Documento / " & numero_documento
    .ParagraphFormat.Alignment = wdAlignParagraphCenter
    End With
    Application.PrintOut Background:=True
    Next i
    End Sub



  • di patel data: 02/01/2017 08:21:53

    terminata la stampa salvi il documento oppure no ? se lo salvi postresti leggere come prima cosa il numero scritto in basso ed incrementare quello. Se non riesci allega un file di esempio.





  • di Ikarus (utente non iscritto) data: 03/01/2017 00:14:30

    Innanzi tutto ti ringrazio della risposta.
    Allora sono riuscito a risolvere solo in parte.
    Dichiarando come public la variabile numero_documento al di fuori della sub riesco a fare incrementare il contatore in modo corretto finchè non chiudo il documento.
    Quando lo vado a riaprire, nel footer il valore è corretto, ma poi se vado ad eseguire la macro il conteggio riparte dall'inizio

     
    Public numero_documento As Integer
    Sub contatore()
    Dim i As Integer
    For i = 1 To 25
    numero_documento = numero_documento + 1
    With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
    .Text = "Documento Numero / " & numero_documento
    .ParagraphFormat.Alignment = wdAlignParagraphLeft
    End With
    Application.PrintOut Background:=True
    Next i
    End Sub



  • di Mister_x (utente non iscritto) data: 03/01/2017 00:51:02

    ciao

    con word non faccio uso di VBA ( quindi prime armi )comunque devi prendere il valore scritto in precedenza nel Footers

    vedi se cisi ti puo' andar bene

    ciao
     
    Sub contatore()
    Dim i As Integer, numero_documento As Variant
    Dim NdocST As String
    NdocST = ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range.Text
    numero_documento = Right(NdocST, 4) * 1
    For i = 1 To 25
    numero_documento = numero_documento + 1
    With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
    .Text = "Documento Numero / " & numero_documento
    .ParagraphFormat.Alignment = wdAlignParagraphLeft
    End With
    Application.PrintOut Background:=True
    Next i
    End Sub






  • di Ikarus (utente non iscritto) data: 03/01/2017 01:51:56

    la tua macro purtroppo mi da errore in esecuzioe "run time 13"
    la riga è la numero 5



  • di patel data: 03/01/2017 08:22:39

    per questo ti ho chiesto di allegare un file di esempio, su questo forum siamo tutti poco pratici di word





  • di Mister_x (utente non iscritto) data: 03/01/2017 09:59:09

    ciao

    io non ho riscontrato nessun errore , vedi immagine che ho allegata,
    da come ti faccio notare se controlli bene ho eseguito il ciclo for ben due volte stampando 2 pagine prima di uscire , iniziando dalla 50 come da te proposta e arrivando alla 52 da come vedi , utilizzando la sub() visibile a fianco

    ciao





  • di patel data: 03/01/2017 10:26:55

    anche a me funziona





  • di Ikarus (utente non iscritto) data: 03/01/2017 22:41:52

    Chiedo venia... me culpa... ho riprovato il codice e funziona alla grande... Vi ringrazio tantissimo.
    Però adesso è sorto un altro problema
    quando il conteggio arriva a 1024 esso ricomincia
    immagino perchè NdocST sia stata dichiarata come stringa

    è possibile ovviare a questa limitazione? manca solo questo e poi sono apposto


    Grazie mille ancora a tutti



  • di Ikarus (utente non iscritto) data: 03/01/2017 22:57:41

    Risolto.
    E' bastato sostituire questa riga

    numero_documento = Right(NdocST, 4) * 1

    con quest'altra

    numero_documento = Right(NdocST, 5) * 1

    Vi ringrazio ancora.

    Posto il codice completo e funzionante se a qualcuno dovesse servire
     
    Sub contatore()
    Dim i As Integer, numero_documento As Variant
    Dim NdocST As String
    NdocST = ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range.Text
    numero_documento = Right(NdocST, 5) * 1
    For i = 1 To 25
    numero_documento = numero_documento + 1
    With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
    .Text = "Documento Numero / " & numero_documento
    .ParagraphFormat.Alignment = wdAlignParagraphLeft
    End With
    Application.PrintOut Background:=True
    Next i
    End Sub



  • di Mister_x (utente non iscritto) data: 04/01/2017 00:14:51

    ciao

    non avevo minimamente pensato ad un valore maggiore di 999 quindi avevo utilizzato la funzione Right()

    possiamo utilizzare la funzione Mid() per tagliare la testa al toro
    numero_documento = Mid(NdocST, 19, 15) * 1

    cosi possiamo arrivare ad un valore di documenti spropositato 99999999999999

    ciao