Allora la mia proposta e' questa:
Aggiungi un Foglio che chiami Index, che sara' usato per creare l'indice dei fogli e "spuntare" quelli da salvare in pdf.
Fai "tasto dx" sul tab col nome Index; scegli Visualizza codice; copia questo codice e inseriscilo nella pagina dell'editor delle macro che cosi' e' stato aperto:
- Codice: Seleziona tutto
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Se doppiclick su B1, cancella elenco:
If Target.Address = "$B$1" Then
Range("Intrv").ClearContents
Cancel = True
Exit Sub
End If
'Se doppioclick nell'elenco, metti /togli la spunta:
If Not Application.Intersect(Range("Intrv"), Target) Is Nothing Then
If Target.Value = "" Then Target.Value = "ü" Else Target.Value = ""
Target.Font.Name = "Wingdings"
Cancel = True
End If
End Sub
Questo servira' per mettere /togliere le "spunte" ai fogli: facendo "doppioclick" nella cella di colonna B accanto a un nome foglio viene alternativamente messa/tolta la spunta; facendo doppioclick in B1 cancelli tutte le spunte
Ora, sempre nell'editor delle macro, fai Menu /Inserisci /Modulo.
Copia questo codice e incollalo nel modulo appena creato:
- Codice: Seleziona tutto
Sub CRindex()
Dim I As Long
'Crea l' Indice dei fogli in colonna A:
Sheets("Index").Select
Range("A:B").ClearContents
For I = 1 To ThisWorkbook.Sheets.Count
If Sheets(I).Name <> "Index" Then
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = Sheets(I).Name
Cells(Rows.Count, 1).End(xlUp).Offset(0, 1).ClearContents
End If
Next I
Range("A1:B1").Value = Array("NomeFoglio", "Selezione")
'Crea l'intervallo delle "spunte"
Range("B2").Resize(I - 2, 1).Name = "Intrv"
'Imposta visualizzazione colonne:
Columns("A:B").EntireColumn.AutoFit
Range("A:A").ColumnWidth = Range("A:A").ColumnWidth * 1.25
End Sub
Sub PdfMultiSh()
Dim WSA(), myC As Range, IInd As Long, PFName As String
Dim XlsF As String, extP As Long, IFName As String
'
ReDim WSA(1 To ThisWorkbook.Sheets.Count)
'Crea elenco fogli selezionati:
With Sheets("Index")
For Each myC In .Range("Intrv")
If myC.Value = "ü" Then
WSA(IInd + 1) = myC.Offset(0, -1).Value
IInd = IInd + 1
End If
Next myC
End With
If IInd = 0 Then Exit Sub 'Termina se nessuna selezione
ReDim Preserve WSA(1 To IInd)
'
Sheets(WSA).Select
'Chiedi Nome del file:
XlsF = ActiveWorkbook.Name
extP = InStrRev(XlsF, ".", , vbTextCompare)
If extP = 0 Then extP = 999
IFName = ActiveWorkbook.Path & "\" & Left(XlsF, extP) & "pdf"
PFName = Application.GetSaveAsFilename(InitialFileName:=IFName, FileFilter:="pdf files, *.pdf", Title:="Scegli Nome Pdf File")
If PFName = CStr(False) Then 'Se nessuna scelta
MsgBox ("Nessun nome scelto, la procedura viene interrotta")
GoTo exitA
Else
'Stampa:
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PFName, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
MsgBox ("Compilato file " & PFName)
End If
'Uscita:
exitA:
Sheets("Index").Select
Range("A1").Select
End Sub
Questo codice comprende due macro:
1) la Sub Crindex, che crea in colonna A di Index l'elenco dei fogli presenti (eccetto Index). Questa va eseguita quando non sei certo che l'elenco comprenda tutti i nomi dei fogli presenti nel file; puoi comunque eseguirla quando vuoi, tieni solo presente che cancella tutte le spunte eventualmente gia' messe
2) la Sub PdfMultiSh, che crea il file pdf dei fogli selezionati su foglio Index. Quando la avvii ti verra' chiesto di selezionare un percorso e un nome per il file da creare.
Quindi, riepilogando:
-aggiungi il foglio Index e metti il suo codice
-aggiungi il Modulo vuoto all'editor delle macro e copiaci il secondo codice
-esegui la Sub Crindex per creare l'indice dei Fogli
-fai doppioclick in colonna B accanto a un nome foglio per mettere /togliere la spunta ai fogli di interesse
-se fai doppioclick su B1 invece l'elenco delle spunte viene azzerato
-quando sei pronto esegui la Sub PdfMultiSh, scegli il nome file e completa il salvataggio; un messaggio segnalera' il completamento e il percorso /nomefile creato
Per eseguire una macro, da Excel:
-premi Alt-F8; scegli la macro da eseguire dall'elenco delle macro disponibili, premi Esegui
Oppure inserisci in foglio Index due pulsanti, prelevandoli dal gruppo "Moduli", e gli assegni le due macro di cui abbiamo parlato
Fai sapere...