buon pomeriggio ho utilizzato una macro in calc per esportare dei fogli in pdf, ho solo un problema, mi esporta solo il primo foglio che risulta attivo e non quelli visibili. qualcuno mi puo aiutare? allego la macro.
il risultato deve essere un unico file con tutti i fogli attivi. grazie in anticipo
Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Sub ExportaInPdfFoglioAttivo
Sheets("xxx").Visible = False
Sheets("xxxxx").Visible = False
Sheets("xxxxx").Visible = False
Sheets("xxxxxxx").Visible = False
Sheets("xxxxxxxx").Visible = False
Sheets("xxxxxxx").Visible = False
Sheets("xxxxxx").Visible = False
Sheets("xxxxxxxxx").Visible = False
Sheets("xxxxx").Visible = False
Sheets("xxxxxxxx").Visible = False
Sheets("xxxxx").Visible = False
Sheets("xxxxxxxxxxx").Visible = False
Sheets("1").Visible = False
Sheets("2").Visible = False
Sheets("3").Visible = False
Sheets("4").Visible = False
Sheets("5").Visible = False
Sheets("6").Visible = False
Sheets("7").Visible = False
Sheets("1").Visible = True
Sheets("2").Visible = True
Sheets("3").Visible = True
Sheets("4").Visible = True
Sheets("5").Visible = True
Sheets("6").Visible = True
Sheets("7").Visible = true
Sheets("1").Activate
Sheets("xxxxxxx").Visible = False
FoglioAttivo = ThisComponent.CurrentController.ActiveSheet
REM --- Percorso di salvataggio del file pdf -----------------------
'PercorsoSalvataggio = ConvertToUrl("file:///C:/Percorso/") ' Esempio WINDOWS da cambiare
REM --- Nome del file pdf ------------------------------------------------------
NomeDelfile = "xxxxxxx_" & Format(Now(), "dd-mm-yyyy") & ".pdf"
REM --- Range da stampare. Notare l'utilizzo di "Selection" e “FogliAttivo”
Dim RANGE_Stampa(0) as new com.sun.star.beans.PropertyValue
RANGE_Stampa(0).Name = "Selection"
RANGE_Stampa(0).Value = FoglioAttivo
REM --- Esporta in formato PDF il “FoglioAttivo”
Dim args1(3) as new com.sun.star.beans.PropertyValue
' Notare che (3) = al Numero delle definizioni (Ossia 0,1 e 2 come di seguito).
args1(0).Name = "URL"
args1(0).Value = PercorsoSalvataggio
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
args1(2).Name = "FilterData"
args1(2).Value = RANGE_Stampa()
REM --- Se il nome del file = stringa nulla esci dalla procedura ----------------------
If NomeDelFile = "" Then Exit Sub
REM --- Se il nome del file esiste già chiedi se sovrascrivere -------------------------
If FileExists(PercorsoSalvataggio & NomeDelFile) Then
REM --- Richiesta conferma di procedere --- Scegliendo "Annulla" esci dalla procedura -----
If Msgbox("ATTENZIONE : Esiste già un file con lo stesso nome nel percorso indicato." & CHR$(10) & _
CHR$(10) & " Vuoi sovrascrivere ?",33,filename) =2 then exit sub
end if
REM ----- Salva il foglio attivo (tutte le sue pagine) in pdf
ThisComponent.StoreToURL(PercorsoSalvataggio & NomeDelFile , Args1())
REM ----- Avviso di fine lavoro ------------------------------------
Msgbox "Operazione eseguita con successo.", 0, "Esportazione PDF:"
Sheets("xxxxxxx").Visible = True
Sheets("xxxxx").Activate
Sheets("xxxx").Visible = False
Sheets("xxxxxxx").Visible = Falsee
Sheets("xxxxxxx").Visible = False
Sheets("xxxxxx").Visible = False
Sheets("xxxxxx").Visible = False
Sheets("xxxxx").Visible = False
Sheets("xxxxxxxx").Visible = False
exitHandler:
Exit Sub
errHandler:
MsgBox "Non ho potuto salvare il file PDF"
Resume exitHandler
End Sub
Sub xxxxxxxxxxxxx()
'
' xxxxxxxxxxxxxxxx
'
'
Sheets("xxxxxxxxxxx").Select
Sheets("xxxxxxx").Visible = True
Sheets("xxxxxx").Select
End Sub
funziona tutto pero nel file salvato vedo solo il primo foglio attivo e non quelli visibili.
Ultima modifica di charlie il domenica 17 dicembre 2023, 16:54, modificato 1 volta in totale.
Motivazione:Formattato codice
Perchè in VBA? Questo è uno di quei casi in cui il registratore di macro fà miracoli!!
Registra una macro e come opzione nell'esportazione in pdf nella scheda Generale nel riquadro intervallo indica "tutto".
Dovrai soltanto modificare nome del file a tuo piacimento.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
REM --- Range da stampare. Notare l'utilizzo di "Selection" e “FogliAttivo”
Dim RANGE_Stampa(0) as new com.sun.star.beans.PropertyValue
RANGE_Stampa(0).Name = "Selection"
RANGE_Stampa(0).Value = FoglioAttivo
REM --- Esporta in formato PDF il “FoglioAttivo”
Dim args1(3) as new com.sun.star.beans.PropertyValue
' Notare che (3) = al Numero delle definizioni (Ossia 0,1 e 2 come di seguito).
args1(0).Name = "URL"
args1(0).Value = PercorsoSalvataggio
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
args1(2).Name = "FilterData"
args1(2).Value = RANGE_Stampa()
REM --- Esporta in formato PDF
Dim args1(1) As New com.sun.star.beans.PropertyValue
args1(0).Name = "Overwrite"
args1(0).Value = True
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
grazie per la disponibilita, provo ma ottengo sempre tutti i fogli non capisco dove sta l'errore.se vede la mia macro funziona solo che mi da 1 pagina invece devono essere 28. cole ve varie prove dei codici forniti ottengo sempre 54 pagine
.
Nel file presenti 6 fogli tutti visibili (Foglio1,2,3,4,5,6).
Da macro:
- Nascondo alcuni fogli (Foglio2,4,6)
- Esporto in unico file pdf i fogli rimasti visibili (Foglio1,3,5)
- Rendo nuovamente visibili i fogli che avevo nascosto (Foglio2,4,6).
Prove fatte con LibreOffice.
Sia con "Option VBASupport 1" ... che senza ... funzionano perfettamente.
.
erasmo84 ha scritto: ↑martedì 19 dicembre 2023, 17:02
grazie ho visto il test e funziona
Ok Grazie del riscontro.
.
erasmo84 ha scritto: ↑martedì 19 dicembre 2023, 17:02
ma nn riesco ad adattarla alla mia macro
Dal codice che hai inserito nel post iniziale non si direbbe che tu non ci possa riuscire.
Perciò io non vado oltre ...
Puoi sempre utilizzare quello dei miei due ultimi test che preferisci e ...
- Nascondere manualmente i fogli presenti o e/o in seguito eliminarli;
- Importare nel file i fogli del tuo file;
- modificare adeguatamente le righe di codice ...con False/True della mia macro
- riportare tante di tali righe quante te ne servono ...
fare prove.
.
'Option VBASupport 1
SUB EsportaComeUnicoFilePdfTuttiFogliVisibili
Doc = ThisComponent
Url = Doc.GetUrl() 'Acquisisco l'URL del file nel computer in uso
REM --- Dall'URL ottenuto automaticamente ricavo "URL SENZA il NOME FILE" del file della macro ---
For X = Len(Url) To 1 Step -1
If InStr(X , Url , "/") <> 0 Then
PosizioneUltimaBarra = X
X=0
End If
Next
UrlSenzaNomeFile = Left(url , PosizioneUltimaBarra
basta per ora ci rinuncio, ora non mi attiva piu i pulsanti che chiudevano le schede e andavano alla home. le ho provate tutte per esportare in pdf. grazie a tutti
'Option VBASupport 1
SUB EsportaComeUnicoFilePdfTuttiFogliVisibili
Doc = ThisComponent
Url = Doc.GetUrl() 'Acquisisco l'URL del file nel computer in uso
REM --- Dall'URL ottenuto automaticamente ricavo "URL SENZA il NOME FILE" del file della macro ---
For X = Len(Url) To 1 Step -1
If InStr(X , Url , "/") <> 0 Then
PosizioneUltimaBarra = X
X=0
End If
Next
UrlSenzaNomeFile = Left(url , PosizioneUltimaBarra
Non capisco il tuo problema, non devi fare altro che COPIARE una delle 2 macro di lucky nel tuo file, la parte che non sai se inserire serve a ricavare il percorso del tuo file .ods e ad usarlo per creare un percorso di destinazione del file esportato in pdf, in questo modo anche cambiando pc o semplicemente la cartella del file ods non dovrai apportare modifiche alla macro per inserire il nuovo percorso.
erasmo84 ha scritto: ↑martedì 19 dicembre 2023, 1:49
grazie per la disponibilita, provo ma ottengo sempre tutti i fogli non capisco dove sta l'errore.se vede la mia macro funziona solo che mi da 1 pagina invece devono essere 28. cole ve varie prove dei codici forniti ottengo sempre 54 pagine
Se ti da solo la prima pagina non mi sembra che funzioni... spiega meglio cosa vuoi fare perchè dalla macro che hai postato non si capisce bene, ci sono alcune parti che si ripetono e altre assolutamente inutili, quindi spiega come fai a decidere quali fogli esportare? sono sempre gli stessi(se è così si possono indicare nella macro) oppure........
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
buongiorno ho un file con tanti fogli che si compilano, ho il primo foglio di gestione con pulsanti, la macro di riferimento in alto deve fare questo:
chiudere tutti i fogli aperti in quel momento e aprire i fogli che voglio esportare in pdf, esportare i fogli e salvarli in pdf e poi una volta finito il salvataggio chiudere tutto e lasciare aperto il foglio home. grazie per tutto (ovviamente il pdf deve avere un nome dato da me con data e ora)
erasmo84 ha scritto: ↑mercoledì 20 dicembre 2023, 10:27la macro di riferimento in alto deve fare questo:
chiudere tutti i fogli aperti in quel momento e aprire i fogli che voglio esportare in pdf
Secondo te come facciamo a sapere quali fogli vuoi esportare? come viene deciso quali fogli esportare, la macro esegue istruzioni ben precise non può sapere quali fogli esportare se non viene indicato, nel mio precedente messaggio ti avevo chiesto se fossero sempre gli stessi fogli oppure no e da cosa dipende.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
buone feste a tutti, ho provato a sostituire copiando la formula ma mi esporta sempre tutti i fogli. allego la formula se potete dirmi dove sbaglio perfavore p.s. se voglio mettere una cartella specifica dove metto il percorso?
Option VBASupport 1
SUB EsportaComeUnicoFilePdfTuttiFogliVisibili
Doc = ThisComponent
Url = Doc.GetUrl() 'Acquisisco l'URL del file nel computer in uso
REM --- Dall'URL ottenuto automaticamente ricavo "URL SENZA il NOME FILE" del file della macro ---
For X = Len(Url) To 1 Step -1
If InStr(X , Url , "/") <> 0 Then
PosizioneUltimaBarra = X
X=0
End If
Next
UrlSenzaNomeFile = Left(url , PosizioneUltimaBarra)
REM --- NASCONDO il foglio/i interessati
Sheets("DISTRI").Visible = False 'Con Option VBASupport 1
Sheets("REGISTRO CAMBI").Visible = False 'Con Option VBASupport 1
Sheets("REGISTRO ODS").Visible = False 'Con Option VBASupport 1
Sheets("PRONTO IMPIEGO").Visible = False 'Con Option VBASupport 1
Sheets("SOSTITUZIONI VAIRA").Visible = False 'Con Option VBASupport 1
Sheets("ELENCO").Visible = False 'Con Option VBASupport 1
Sheets("TURNAZIONI").Visible = False 'Con Option VBASupport 1
Sheets("GESTIONE TURNI").Visible = False 'Con Option VBASupport 1
Sheets("MUTE").Visible = False 'Con Option VBASupport 1
Sheets("MONTANTI").Visible = False 'Con Option VBASupport 1
Sheets("GRADI").Visible = False 'Con Option VBASupport 1
Sheets("RIEPILOGATIVO PATENTI ARMERIA").Visible = False 'Con Option VBASupport 1
Sheets("BOX CERN E PROT").Visible = False 'Con Option VBASupport 1
'Doc.Sheets(1).IsVisible = False 'Per Nr indice del foglio 0=PrimoFoglio
'Doc.Sheets.GetByName("DISTRI").IsVisible = False 'Per nome del foglio
'Doc.Sheets.GetByName("REGISTRO CAMBI").IsVisible = False 'Per nome del foglio
'Doc.Sheets.GetByName("REGISTRO ODS").IsVisible = False 'Per nome del foglio
'Doc.Sheets.GetByName("PRONTO IMPIEGO").IsVisible = False 'Per nome del foglio
'Doc.Sheets.GetByName("SOSTITUZIONI VAIRA").IsVisible = False 'Per nome del foglio
'Doc.Sheets.GetByName("TURNAZIONI").IsVisible = False 'Per nome del foglio
'Doc.Sheets.GetByName("GESTIONE TURNI").IsVisible = False 'Per nome del foglio
'Doc.Sheets.GetByName("MUTE").IsVisible = False 'Per nome del foglio
'Doc.Sheets.GetByName("MONTANTI").IsVisible = False 'Per nome del foglio
'Doc.Sheets.GetByName("GRADI").IsVisible = False 'Per nome del foglio
'Doc.Sheets.GetByName("RIEPILOGATIVO PATENTI ARMERIA").IsVisible = False 'Per nome del foglio
'Doc.Sheets.GetByName("BOX CERN E PROT").IsVisible = False 'Per nome del foglio
'STOP 'Per verifica se fogli interessati vengono nascosti
REM --- Nome del file esportato in pdf ---
NomeDelfile = "ODS_HOTEL_" & Format(Now(), "dd-mm-yyyy") & ".pdf"
REM --- Se il nome del file = stringa nulla esci dalla procedura ----------------------
If NomeDelFile = "" Then Exit Sub
REM --- Se il nome del file esiste già chiedi se sovrascrivere -------------------------
If FileExists(PercorsoSalvataggio & NomeDelFile) Then
REM --- Richiesta conferma di procedere --- Scegliendo "Annulla" esci dalla procedura -----
If Msgbox("ATTENZIONE : Esiste già un file con lo stesso nome nel percorso indicato." & CHR$(10) & _
CHR$(10) & " Vuoi sovrascrivere ?",33,filename) =2 then exit sub
end if
REM --- Esportazione in pdf ---
Dim FilePDF(1) As New com.sun.star.beans.PropertyValue
FilePDF(0).Name = "Overwrite"
FilePDF(0).Value = True
FilePDF(1).Name = "FilterName"
FilePDF(1).Value = "calc_pdf_Export"
PercorsoDiSalvataggio = UrlSenzaNomeFile & NomeDelfile
Doc.storeToURL(PercorsoDiSalvataggio, FilePDF())
REM --- VISUALIZZO il foglio/i interessati
' Mostro il foglio/i visibile che non volevo fosse presente
Sheets("DISTRI").Visible = True 'Con Option VBASupport 1
Sheets("REGISTRO CAMBI").Visible = True 'Con Option VBASupport 1
Sheets("REGISTRO ODS").Visible = True 'Con Option VBASupport 1
Sheets("PRONTO IMPIEGO").Visible = True 'Con Option VBASupport 1
Sheets("SOSTITUZIONI VAIRA").Visible = True 'Con Option VBASupport 1
Sheets("ELENCO").Visible = True 'Con Option VBASupport 1
Sheets("TURNAZIONI").Visible = True 'Con Option VBASupport 1
Sheets("GESTIONE TURNI").Visible = True 'Con Option VBASupport 1
Sheets("MUTE").Visible = True 'Con Option VBASupport 1
Sheets("MONTANTI").Visible = True 'Con Option VBASupport 1
Sheets("GRADI").Visible = True 'Con Option VBASupport 1
Sheets("RIEPILOGATIVO PATENTI ARMERIA").Visible = True 'Con Option VBASupport 1
Sheets("BOX CERN E PROT").Visible = True 'Con Option VBASupport 1
'Doc.Sheets(1).IsVisible = True 'Per Nr indice del foglio 0=PrimoFoglio
'Doc.Sheets.GetByName("DISTRI").IsVisible = True 'Per nome del foglio
'Doc.Sheets.GetByName("REGISTRO CAMBI").IsVisible = True 'Per nome del foglio
'Doc.Sheets.GetByName("REGISTRO ODS").IsVisible = True 'Per nome del foglio
'Doc.Sheets.GetByName("PRONTO IMPIEGO").IsVisible = True 'Per nome del foglio
'Doc.Sheets.GetByName("SOSTITUZIONI VAIRA").IsVisible = True 'Per nome del foglio
'Doc.Sheets.GetByName("TURNAZIONI").IsVisible = True 'Per nome del foglio
'Doc.Sheets.GetByName("GESTIONE TURNI").IsVisible = True 'Per nome del foglio
'Doc.Sheets.GetByName("MUTE").IsVisible = True 'Per nome del foglio
'Doc.Sheets.GetByName("MONTANTI").IsVisible = True 'Per nome del foglio
'Doc.Sheets.GetByName("GRADI").IsVisible = True 'Per nome del foglio
'Doc.Sheets.GetByName("RIEPILOGATIVO PATENTI ARMERIA").IsVisible = True 'Per nome del foglio
'Doc.Sheets.GetByName("BOX CERN E PROT").IsVisible = True 'Per nome del foglio
REM ----- Avviso di fine lavoro ------------------------------------
Msgbox "Operazione eseguita con successo.", 0, "Esportazione PDF:"
Sheets("HOME").Visible = True
Sheets("HOME").Activate
Sheets("HOTEL 379 - HOTEL 145").Visible = True
Sheets("HOTEL 20B").Visible = True
Sheets("HOTEL 21").Visible = True
Sheets("HOTEL 536").Visible = True
Sheets("HOTEL 299").Visible = True
Sheets("HOTEL 27").Visible = True
Sheets("HOTEL 322 - RDS").Visible = true
exitHandler:
Exit Sub
errHandler:
MsgBox "Non ho potuto salvare il file PDF"
Resume exitHandler
End Sub