Condividi:        

vba excel nominare file di stampa da range

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

vba excel nominare file di stampa da range

Postdi Francesco53 » 09/08/20 10:24

Buongiorno a tutti, anche se l'argomento è stato trattato in altri post, purtroppo non riesco a risolvere.
Tramite codice che allego, devo stampare un range, (utilizzo stampante virtuale in pdf predefinita),
la macro funziona è stampa, solo che come nome file mi inserisce il nome del file excel.
Io cercavo di far si che il nome lo prendesse direttamente da una cella, ma purtroppo non riesco.
Questo è il codice che utilizzo:

Codice: Seleziona tutto
Sub Stampa()
Dim nomefile As String
mese = Sheets("PLANNING").Cells(19, 14)
nomefile = mese & ".pdf"
Dim percorso As String
percorso = ActiveWorkbook.Path & "\" & nomefile
ActiveSheet.PageSetup.PrintArea = "$A$2:$AH$16"
ActiveWindow.SelectedSheets.PrintOut Copies:=1
ActiveWindow.PrintToFile = True
ActiveWindow.PrintToFileName = percorso
End Sub


Avrei bisogno del vostro aiuto per impostare il nome definito dalla cella.
Grazie
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Sponsor
 

Re: vba excel nominare file di stampa da range

Postdi Anthony47 » 10/08/20 00:09

Prova con questa variante:
Codice: Seleziona tutto
Sub StampaPdf()
Nomefile = Sheets("PLANNING").Cells(19, 14)
With ActiveSheet
    .PageSetup.PrintArea = "$A$2:$AH$16"
    .ExportAsFixedFormat Type:=xlTypePDF, Filename:=Nomefile, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, OpenAfterPublish:=False
End With
End Sub

Pero' non ricordo se su XL2007 tutti i parametri indicati fossero disponibili (forse mancava Quality, o IncludeDocProperties); se hai un "run time error" segnala su quale riga e vedremo.

Fai sapere
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel nominare file di stampa da range

Postdi Francesco53 » 10/08/20 09:44

Buongiorno Anthony ti ringrazio per il tuo intervento, purtroppo come da te ipotizzato restituisce l'errore:
Errore di Run-Time 5
Chiamata a routine o argomenti non validi in questa porzione di codice:
Codice: Seleziona tutto
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nomefile, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, OpenAfterPublish:=False


Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: vba excel nominare file di stampa da range

Postdi Anthony47 » 10/08/20 11:24

Allora elimina la riga con i 2 argomenti dubbi; quindi:
Codice: Seleziona tutto
Sub StampaPdf()
nomefile = Sheets("PLANNING").Cells(19, 14)
With ActiveSheet
    .PageSetup.PrintArea = "$A$2:$AH$16"
    .ExportAsFixedFormat Type:=xlTypePDF, Filename:=nomefile, _
    IgnorePrintAreas:=False, OpenAfterPublish:=False
End With
End Sub

Se ancora ti da errore, apri l'help on line del tuo vba, cerca help su Worksheet.ExportAsFixedFormat e vedi quali sono gli argomenti accettati e con quali possibili parametri.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel nominare file di stampa da range

Postdi Francesco53 » 10/08/20 14:28

Ciao Anthony, ho seguito il tuo consiglio e sono andato a cercare nell'help la soluzione, ma purtroppo non ho trovato che quanto già presente nel codice.
Una domanda, forse stupida ma visto che prima di rivolgermi al forum, avevo provato tantissime soluzioni ma purtroppo sempre con errore, stavo pensando che forse la stampa in pdf non sia la soluzione da cercare in quanto come avevo accennato la stampante virtuale è la stampante di default, per cui forse bisogna mandare in stampa il range senza considerare l'estensione pdf, ma cercare solo una soluzione al nomefile.
Forse ho detto una stupidaggine, ma spero non sia così.
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: vba excel nominare file di stampa da range

Postdi Anthony47 » 11/08/20 01:05

Io purtroppo non so quale e' la stampante virtuale che tu usi, ne' sappiamo se quella stampante ha una libreria che ne integra le funzioni nel vba...
Intanto leggo in giro (io ho felicemente saltato Office 2007) che e' necessario usare un add-in Microsoft per salvare in Pdf; un documento che descrive mi pare bene come fare e' qui: https://www.uis.edu/informationtechnolo ... eAsPDF.pdf
(fa riferimento a Word, ma ho capito che il componente supporta tutti i pacchetti Office)
Vedi se riesci a seguire la procedura

Nel frattempo per prova usa un "nomefile" fisso; cioe' invece di nomefile = Sheets("PLANNING").Cells(19, 14) inserisci
Codice: Seleziona tutto
nomefile = ThisWorkbook.Path & "\pippo_pdf.pdf"


Fai sapere…
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel nominare file di stampa da range

Postdi Francesco53 » 11/08/20 14:04

Buongiorno Anthony, non volendo scaricare nuovi add-on, ho scorso la combobox che sceglie la tipologia di stampa,
ho trovato il formato Microsoft Print to Pdf, ho provato ad utilizzarlo e funziona bene, l'unico problema e che non riesco ad impostare
il nome da dare al file, mi presenta una casella vuota e devo inserirlo a mano.
Se sai o esiste una opportunità di fagli assumere un nome da cella sarebbe il completamento della mia richiesta, se non possibile, lasciamo così come da codice che pubblico.

Codice: Seleziona tutto
Sub MicrosoftPrintToPdf()
    ActiveSheet.PageSetup.PrintArea = "$A$2:$AH$16"
    ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
End Sub


Grazie per quanto stai facendo,
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: vba excel nominare file di stampa da range

Postdi Anthony47 » 11/08/20 23:36

Quella macro si limita a dare il comando "stampa usando la stampante predefinita", non offre nessun aggancio per impostare il nome del file.
Non hai mai detto quale stampante virtuale utilizzi. Se pubblichi uno screenshot dell'interfaccia della tua stampante (cioe' come si presenta dopo che hai dato il comando "Print") posso vedere se e' approcciabile alla cieca con "SendKeys"

Quando ero su Office 2003 io usavo PDFCreator, e per la versione 1.7.3 avevo creato alcune macro che consentivano la stampa con indicazione di cosa stampare e dove salvare. Vedi quanto scrissi "tempo fa" ad altro utente qui: viewtopic.php?p=610048#p610083
Il file di esempio lì pubblicato e' sempre disponibile; non so se invece e' ancora disponibile la versione 1.7.3 di pdfCreator (ora credo sia alla versione 3.x.x), se ti interessa questo metodo prova a cercare e installare quella versione.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel nominare file di stampa da range

Postdi Francesco53 » 12/08/20 10:39

Buongiorno Anthony, la stampanti che ho sono:

Immagine

Quindi Foxit Reader è la stampante virtuale.
Io ho fatto per un amico un semplice Planner dove inserisce i giorni lavorati, permessi etc e penso lui abbia l'ultima versione di excel.

Pensavo fosse più diretta la soluzione del problema, per cui la macro avrebbe utilizzato di default la stampante, non pensando di dover far installare anche a lui stampanti virtuali.
Pertanto dovrei realizzare qualcosa che nel mio vecchio pc non funziona ma nel suo va bene.
Penso che purtroppo si dovrà digitare lui a mano il nome file.
Grazie per il tuo aiuto e per le indicazioni che mi hai inviato.
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: vba excel nominare file di stampa da range

Postdi raimea » 12/08/20 14:12

ciao
provo dire come faccio io
non si sa mai... :D

io faccio una cosa simile con dei fogli excel

la prima volta che devo stampare il foglio
lo simulo manualmente vado in:

file - stampa - scelgo la stampante microsf print to pdf

Immagine

POI

lanciando la mia macro di stampa
tiene in memoria quella stampante virtuale
e tutto prosegue

questa la semplice macro che utilizzo :

Codice: Seleziona tutto
Sub Stampa_statistiche()
    Dim lastRow As Long
    Dim area As Range
    Sheets("tec_statist").Select
   
    lastRow = Cells(Rows.Count, 4).End(xlUp).Row  ' 4=col D
   
    Set area = Range("c1:i" & lastRow)
    area.PrintPreview
    'area.PrintOut
End Sub


(il nome del foglio da stampare, io lo scrivo a mano ogni volta )

ciao
S.O. win10, Excell 2019
Avatar utente
raimea
Utente Senior
 
Post: 1427
Iscritto il: 11/02/10 07:33
Località: lago

Re: vba excel nominare file di stampa da range

Postdi Anthony47 » 12/08/20 18:35

La Sub StampaPdf che ho pubblicato l'altro ieri funziona su XL2010 e successive (quindi funzionerebbe anche per raimea, se ha Office 2010)
E per quello che ne so dovrebbe funzionare anche su Office2007 se e' installato quel benedetto add-in Microsoft, tramite il comando .ExportAsFixedFormat (quindi tecnicamente non dovrei parlare di "StampaPDF" ma di "SalvaPDF")

Per Francesco: se mi fai lo screenshot di quello che ti compare "DOPO" che hai avviato la stampa (cioe' quando manualmente puoi inserire il nome file) forse posso fare qualche altra proposta.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel nominare file di stampa da range

Postdi Anthony47 » 12/08/20 19:08

Per Francesco: se mi fai lo screenshot di quello che ti compare "DOPO" che hai avviato la stampa (cioe' quando manualmente puoi inserire il nome file) forse posso fare qualche altra proposta.
Pero' se l'utente ha una versione Office piu' recente forse non ha senso cercare una soluzione che funzioni su una piattaforma superata...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel nominare file di stampa da range

Postdi Francesco53 » 12/08/20 21:50

Ciao Anthony, ti posto lo screenshot delle due macro che ho:
1° Macro:
Codice: Seleziona tutto
Sub Stampa()
Dim nomefile As String
nomefile = Sheets("PLANNING").Cells(19, 14)
Dim percorso As String
percorso = ActiveWorkbook.Path & "\" & nomefile
ActiveSheet.PageSetup.PrintArea = "$A$2:$AH$16"
ActiveWindow.SelectedSheets.PrintOut Copies:=1
End Sub


Screenshot 1:
Immagine

2° Macro:
Codice: Seleziona tutto
Sub MicrosoftPrintToPdf()
    ActiveSheet.PageSetup.PrintArea = "$A$2:$AH$16"
    ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
End Sub


Screenshot 2:
Immagine

Questo spero sia quanto mi hai chiesto,
Grazie per la tua disponibilità
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: vba excel nominare file di stampa da range

Postdi Francesco53 » 13/08/20 10:41

Anthony47 ha scritto:
Per Francesco: se mi fai lo screenshot di quello che ti compare "DOPO" che hai avviato la stampa (cioe' quando manualmente puoi inserire il nome file) forse posso fare qualche altra proposta.
Pero' se l'utente ha una versione Office piu' recente forse non ha senso cercare una soluzione che funzioni su una piattaforma superata...


Buongiorno Anthony, concordo con te sul fatto che avendo il mio amico una versione più recente, è forse inutile andare oltre in questo argomento, gli installo la tua prima macro.
Grazie per la tua disponibilità,
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: vba excel nominare file di stampa da range

Postdi Anthony47 » 13/08/20 12:42

Solo per provarci, ho compilato questa macro di stampa:
Codice: Seleziona tutto
Sub GodSaveFrank()
If Left(Application.Version, 2) = "12" Then
    If InStr(1, Application.ActivePrinter, "Foxit", vbTextCompare) > 0 Then
    'se XL2007 e Foxit printer:
        Nomefile = "D:\DDocs\" & Sheets("PLANNING").Cells(19, 14)           '<<< Percorso e Nome file
        ActiveSheet.PageSetup.PrintArea = "$A$2:$AH$16"
        ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
        Application.Wait (Now + TimeValue("0:00:05"))
        Application.SendKeys Nomefile, True
        Application.SendKeys "{ENTER}"
        Exit Sub
    End If
ElseIf CLng(Left(Application.Version, 2)) > 12 Then
'Se XL>2007:
    Nomefile = "D:\DDocs\" & Sheets("PLANNING").Cells(19, 14)               '<<< Percorso e Nome file
    With ActiveSheet
        .PageSetup.PrintArea = "$A$2:$AH$16"
        .ExportAsFixedFormat Type:=xlTypePDF, Filename:=Nomefile, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    End With
    Exit Sub
End If
'Altri casi:
ActiveSheet.PageSetup.PrintArea = "$A$2:$AH$16"
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
End Sub

Essa controlla se la versione e' XL2007 e' la stampante di default e' una "Foxit", nel qual caso procede con una stampa e sottomette il nome file al dialog box della stampante tramite "SendKeys".
Se invece e' una versione superiore allora procede con ExportAsFixedFormat

Se vuoi provare...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: vba excel nominare file di stampa da range

Postdi Francesco53 » 13/08/20 21:04

Ciao Anthony, grazie per la tua pazienza e cortesia, inserisco la macro nel foglio e quando sarà possibile ti farò sapere come va.
Io ho provato in excel 2007 è purtroppo non funziona, il sendkeys mi scrive nella cella dove è posizionato il cursore nel foglio.
Comunque appena la posso provare sulla versione in utilizzo ti farò sapere, ma penso che lì funzionerà di sicuro.
Francesco
S.O. Windows 10 e Office 2007
Avatar utente
Francesco53
Utente Senior
 
Post: 811
Iscritto il: 20/02/10 18:45

Re: vba excel nominare file di stampa da range

Postdi Anthony47 » 16/08/20 00:25

Le immagini pubblicate facevano pensare che dopo il comando di Stampa il "focus" fosse sulla finestra di dialogo in attesa del nome file; evidentemente non e' così.
Purtroppo SendKeys "spara alla cieca", cioe' sulla finestra al momento in primo piano. Si potrebbe complicare ulteriormente la macro inserendo l'attesa tramite api di sistema della finestra di dialogo di Foxit, ma secondo me non merita visto che riguarda solo il pc di prova; rimaniamo invece in attesa di sapere se sul pc "di produzione" il problema risulta risolto.
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "vba excel nominare file di stampa da range":


Chi c’è in linea

Visitano il forum: Nessuno e 16 ospiti