Contatore incrementale word
Hai un problema con Excel? 
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
Vuoi Approfondire?