Vedi se risolvi con quanto suggerito da poldo.
In alternativa io prenderei lo spunto da quanto fatto con l'utente rosy2 in questa discussione:
viewtopic.php?p=605857#p605941In particolare: l'uso di una stampante virtuale per creare file pdf, l'impostazione "Stampa automaticamente", l'uso di una macro per scorrere gli url desiderati da stampare.
La stampante virtuale che io uso e' PDFCreator, scaricabile qui:
http://www.pdfforge.org/pdfcreator/downloadPer l'impostazione "Stampa automaticamente" riporto qui le istruzioni gia' presenti nella discussione appena linkata.
2.Personalizza PDFCreator in modo che stampi automaticamente:
-avvia PDFCreator
-Menu /Stampante /Opzioni; fai click su SalvataggioAutomatico
-spunta Utilizza salvataggio automatico
-spunta Utilizza questa cartella per il salvataggio automatico
-come cartella io ho usato D:\PIPPO\prova\
Puoi usare la cartella che vuoi; la cartella deve gia' esistere e non deve contenere file con nome del tipo 2017*.pdf; lo stesso nome cartella va inserito in una riga del codice macro (vedi avanti)
-conferma con Salva e puoi chiudere la finestra PDFCreator
Aggiungo: prima di chiudere la finestra PDFCreator imposta "Nome del file" come "<DateTime>" (dovrebbe essere la modalita' di default, ma meglio controllare).
Finita questa fase, prepara su foglio Excel una tabella con in colonna B l'url da aprire e in colonna A il nome file che vuoi utilizzare per salvare il file pdf. Usa la riga 1 per le intestazioni e comincia l'elenco da riga 2.
A questo punto, va inserito il codice che dovrebbe produrre tutte le stampe.
Per questo, partendo dal file Excel:
-premi Alt-F11 per aprire l'editor delle macro
-Menu /Inserisci /Modulo
-Copia il codice seguente e incollalo nel frame dx del modulo appena creato
-Personalizza la riga marcata <<< per indicare in quale directory directory verra' effettuato il salvataggio automatico dei file pdf che saranno generati.
La directory deve gia' esistere e non deve contenere file pdf il cui nome cominci con "AnnoCorrente" (quindi con 2017).
Il codice:
- Codice: Seleziona tutto
Dim IE As Object, objPDFCreator As Object
Public Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)
Sub StampaPagine()
Dim I As Long, myF As String, myTim As Single, mYear As Long
'
'Imposta stampante di default:
Call Shell("rundll32 printui.dll,PrintUIEntry /y /n ""PDFCreator""")
Sleep (5000)
'
Set IE = CreateObject("InternetExplorer.Application")
mYear = Year(Now)
IE.Visible = True
Perc = "D:\PIPPO\prova\" '<<<< La directory di salvataggio automatico
For I = 2 To Cells(Rows.Count, 2).End(xlUp).Row
If Dir(Perc & mYear & "*.pdf") <> "" Then
MsgBox ("Esistono gia' file " & mYear & "*.pdf" & vbCrLf & _
"Le stampe non possono procedere") '**** Vedi Testo
GoTo exitA
End If
Cells(I, 2).Select
If Selection.Value <> "" Then
'Carica la pagina:
GetTabs (Cells(I, 2))
myWait (1.5)
'Stampala:
Application.SendKeys "%f", True
myWait (2)
Application.SendKeys "s", True
myWait (3)
Application.SendKeys "^{ENTER}", True
myWait (0.1)
myTim = Timer
remyF:
DoEvents:
myWait (2.5)
myF = Dir(Perc & mYear & "*.pdf")
'attesa file salvato, timeout 15sec:
If myF = "" And Timer < (myTim + 15) Then GoTo remyF
'Attesa completamento stampa, timeout 40 sec
If FileStatus(Perc & myF) <> 0 And Timer < (myTim + 40) Then GoTo remyF
myWait (1)
If myF <> "" Then Name (Perc & myF) As (Perc & Cells(I, 1).Value & ".pdf")
remyN:
DoEvents
If FileStatus(Perc & Cells(I, 1).Value & ".pdf") <> 0 And Timer < (myTim + 15) Then GoTo remyN
End If
Next I
MsgBox ("Completato...")
exitA: 'Uscita da IE
IE.Quit
Set IE = Nothing
End Sub
Sub GetTabs(ByVal MyUrl As String)
'Time out su 15 sec
If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.Application")
With IE
' Application.SendKeys "{ESC}"
.navigate MyUrl
.Visible = True
myTim = Timer
Do While .Busy
DoEvents
If Timer > (myTim + 5) Then Exit Do
Loop 'Attesa not busy
Do While .readyState <> 4
DoEvents
If Timer > (myTim + 15) Then Exit Do
Loop 'Attesa documento
End With
'
myWait (1)
End Sub
Sub myWait(myStab As Single)
Dim myStTiM As Single
'
myStTiM = Timer
Do 'wait myStab
DoEvents
Sleep (100)
If Timer > myStTiM + myStab Or Timer < myStTiM Then Exit Do
Loop
End Sub
Function FileStatus(filename As String) As Variant
'Check file status; codice di ritorno:
'0=file libero, 70=file occupato, 53=file non esiste
'76=path non esiste
'altri errori: da indagare
'
Dim filenum As Integer, errnum As Integer
'
On Error Resume Next ' Turn error checking off.
filenum = FreeFile() ' Get a free file number.
' Attempt to open the file and lock it.
Open filename For Input Lock Read As #filenum
Close filenum ' Close the file.
errnum = Err ' Save the error number that occurred.
On Error GoTo 0 ' Turn error checking back on.
FileStatus = errnum
End Function
Molte cose sono derivate dalla discussione linkata, anche se il codice e' ora piu' articolato.
Quando sei pronto, attiva il foglio con l'elenco degli Url e avvia la Sub StampaPagine; la modalita' di lancio:
-premi Alt-F8
-seleziona StampaPagine dall'elenco di macro disponibili
-premi Esegui
La macro aprira' una sessione di InternetExplorer e aprira' una dopo l'altra le pagine indicate sul foglio Excel, impostera' PDFCreator come stampante di default, avviera' la stampa, rinominera' i file con il nome indicato accanto all'url.
Questa fase e' fatta "al buio"; e' quindi importante che il pc non esegua altro durante l'esecuzione della macro. Si raccomanda quindi di cominciare con un piccolo elenco di Url per testare il funzionamento di tutto. E' possibile che qualche pagina impieghi effettivamente tanto tempo a essere stampata, quindi organizzati col caffe'.
Il risultato sara' un elenco di file "pdf" contenenti la stampa degli Url elencati.
Se pensi di usare la stampante virtuale PDFCreator per altri scopi allora e' opportuno togliere, in PDFCreator /Opzioni, l' impostazione "Utilizza salvataggio automatico"
Ciao