Il programma, grazie alla disponibilità di Anthony che si è prestato a risolvere diversi punti, è funzionante.
Permette di salvare, in un file testo (nella stessa directory del file word), i numeri pagina delle pagine che contengono testo e note a colori o immagini e, in una seconda riga tutte le pagine in bianco e nero.
A questo punto è sufficiente copiare la riga dei numeri pagina e incollarli nell'apposito box di stampa.
E' stato, inoltre, implementato il codice (commentato a fine macro) che permette di stampare direttamente con una o l'altra stampante ma spiegherò alla fine del post come fare.
- Codice: Seleziona tutto
Option Base 1
Sub PagineAColoriParagrafo()
msg = " Si sta per avviare la ricerca di fogli a colori e b/n " & vbCrLf
msg = msg & " sul documento " & ActiveDocument.Name & vbCrLf
msg = msg & " il file sara' salvato all'inizio e poi Chiuso " & vbCrLf
msg = msg & " per confermare premi SI, oppure NO"
scelta = MsgBox(Prompt:=msg, Buttons:=vbYesNo)
If scelta = 7 Then Exit Sub
'Ini = Timer
ActiveDocument.Save
Dim Parola, PParola
Dim strParola As String
Dim voceIndice As String
Dim voceIndiceTrovata As Boolean
Dim numeroPagina As String
Dim MnumPag As Integer, JJ As Long
Dim NpCol As String, NpBN As String
Dim PagImm As String
Dim InS
Dim VettC(1000) As Integer
Perc = ActiveDocument.Path & "/"
NumPag = ActiveDocument.BuiltInDocumentProperties(wdPropertyPages)
Application.ScreenUpdating = False
'Controlla nelText
For Each Parola In ActiveDocument.Paragraphs '.Words
JJ = JJ + 1
Parola.Range.Select
If Selection.Font.ColorIndex > 1 And VettC(Selection.Information(wdActiveEndPageNumber)) = 0 Then
strParola = CStr(Parola)
strParola = Replace(strParola, Chr(13), "")
If Trim(strParola) <> "" Then
wUnits = Selection.Move(Unit:=wdCharacter, Count:=1)
For Each PParola In ActiveDocument.Paragraphs(JJ).Range.Words
PParola.Select
numeroPagina = Selection.Information(wdActiveEndPageNumber)
If PParola.Font.ColorIndex > 1 Then VettC(numeroPagina) = numeroPagina
Next PParola
End If
End If
DoEvents
Next Parola
'Controlla nelle footnotes:
JJ = 0
If ActiveDocument.Footnotes.Count > 0 Then
For Each Parola In ActiveDocument.StoryRanges(wdFootnotesStory).Paragraphs '.Words
JJ = JJ + 1
Parola.Range.Select
If Selection.Font.ColorIndex > 1 And VettC(Selection.Information(wdActiveEndPageNumber)) = 0 Then
strParola = CStr(Parola)
strParola = Replace(strParola, Chr(13), "")
If Trim(strParola) <> "" Then
For Each PParola In ActiveDocument.StoryRanges(wdFootnotesStory).Paragraphs(JJ).Range.Words
PParola.Select
numeroPagina = Selection.Information(wdActiveEndPageNumber)
If Selection.Font.ColorIndex > 1 Then VettC(numeroPagina) = numeroPagina
Next PParola
End If
End If
DoEvents
Next Parola
End If
'Controlla Shapes 6 InLineShapes
For Each InS In ActiveDocument.InlineShapes
InS.Select
numeroPagina = Selection.Information(wdActiveEndPageNumber)
VettC(numeroPagina) = numeroPagina
Next InS
'
For Each InS In ActiveDocument.Shapes
InS.Select
numeroPagina = Selection.Information(wdActiveEndPageNumber)
VettC(numeroPagina) = numeroPagina
Next InS
NumPag = ActiveDocument.BuiltInDocumentProperties(wdPropertyPages)
For PCol = 1 To NumPag
If VettC(PCol) <> 0 Then
NpCol = NpCol & "," & VettC(PCol)
Else
NpBN = NpBN & "," & PCol
End If
Next PCol
NpCol = Right(NpCol, Len(NpCol) - 1)
NpBN = Right(NpBN, Len(NpBN) - 1)
Application.ScreenUpdating = True
Open Perc & "PagStampa.txt" For Output As #1
Print #1, "Col - " & NpCol
Print #1, "B/n - " & NpBN
Close #1
'Stampa B/n stampante default
'Application.PrintOut FileName:=Perc & ActiveDocument.Name, Pages:=NpBN, Range:=wdPrintRangeOfPages
'Stampa Colore
'StDef = Shell("C:\PrintCol.bat") ' imposta la stampante a colori come default
'Application.PrintOut FileName:=Perc & ActiveDocument.Name, Pages:=NpCol, Range:=wdPrintRangeOfPages
'StDef = Shell("C:\PrintDefault.bat") ' reimposta la stamapnte B/n come default
'Fine = Timer - Ini
'MsgBox Fine
ActiveDocument.Close savechanges:=False
End Sub
Per stampare automaticamente con due stampanti diverse ho optato per la soluzione che rende default prima una e poi l'altra stampante utilizzando due file .bat da inserire nella root di C:\
il contenuto del file della stampante default
può essere questo (ognuno dovrà inserire il nome della propria stampante)
- Codice: Seleziona tutto
RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "HP LaserJet xxxxxxxxxxx"
Sostituire il nome stampante tra le virgolette e nominare il file come:
PrintDefault.batPer la stampante a colori
il codice è identico ma avrà il nome della stampante a colori all'interno degli apici
il file dovrà avere il nome:
PrintCol.bat.
Questi nomi sono necessari in quanto richiamati dalla macro.
Nella macro dovranno essere tolti i commenti nelle ultime righe codice riguardante la stampa
Sono soddisfatto per quanto realizzato ma il progetto può sicuramente essere migliorato.
ciao
EDIT ore 15:30 - aggiunta "Option base 1" in testa al modulo