Stampa solo da pulsante con macro

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Ant52
Messaggi: 180
Iscritto il: sabato 18 agosto 2018, 15:38

Stampa solo da pulsante con macro

Messaggio da Ant52 »

Ho la necessità di fare andare in stampa il solo foglio1 di un file di calc (che ne contiene 16) con un pulsante associato ad una macro perchè in questo modo ho la possibilità di registrare tutti i movimenti stampati (li metto in una cartella protetta da password) Nel file di calc ho nascosto tutti i fogli tranne uno nel quale ho messo dei pulsanti associati a delle macro uno per la stampa ed uno per aprire una finestra di dialogo per inserire i dati. Funziona tutto ma ho due problemi: uno riguarda la stampa perchè la macro che ho utilizzato stampa tutti i fogli nascosti (rendendoli visibili solo per la stampa e successivamente li nasconde nuovamente) e l'opzione con il msgbox non funziona (stampa sempre anche se si preme NO); l'altro problema è quello dell'anteprima di stampa che mi fa vedere il foglio nascosto e che quindi è stampabile anche con un print screen senza passare dal pulsante macro.
Potrei eliminare l'anteprima di stampa dal menu Strumenti-Personalizza ma è ovvio che chi ne capisce un poco riesce a rimettere l'anteprima molto facilmente. Esiste la possibilità di impedire di rimettere sia la stampa che il Mostra Fogli dal menu Formato?
La macro associata al pulsante di stampa è la seguente:

Codice: Seleziona tutto

dim document   as object
	dim dispatcher as object
	dim objSheets  as object
	dim ArrayPrn(8) as new com.sun.star.beans.PropertyValue
	Dim PrnOptn(5) as new com.sun.star.beans.PropertyValue
	
    Dim sMessaggio As String
    sMessaggio = "                REGISTRARE E STAMPARE  "
    If MsgBox (sMessaggio, 292, "                 Attenzione!  L'ASSEVERAZIONE VERRA' REGISTRATA ") = 6 Then 
    End Sub
   
     
   
     	
	'-------------------------------------------------'
	objSheets = ThisComponent.Sheets                  ' CONTENITORE GRUPPO SHEETS FOGLIO CALC CORRENTE
	' ArrayPrn = ThisComponent.GetPrinter               ' ACQUISISCI L'IMPOSTAZIONE 
	ArrayPrn(0).Name = "Name"                         ' PROPRIETA' NOME DELLA STAMPANTE
	ArrayPrn(0).Value = "Adobe PDF"	                  ' IMPOSTA NOME DELLA STAMPANTE 
	ThisComponent.SetPrinter(ArrayPrn)                ' IMPOSTA LA STAMPANTE 
	PrnOptn(0).Name = "CopyCount"                     ' IMPOSTA L'OPZIONE DI STAMPA CopyCount
	PrnOptn(0).Value = 1                              ' IMPOSTA IL VALORE PER CopyCount
	' PrnOptn(1).Name = "FileName"
	' PrnOptn(1).Value = "W:\PROCEDUR\OpenOffice\Vari\Prova.pdf"
	PrnOptn(5).Name = "Wait"                          ' IMPOSTA L'OPZIONE Wait  
	PrnOptn(5).Value = True                           ' IMPOSTA SU ATTENDI OK DA STAMPA PER RIENTRARE IN Calc

	  
	For I = 0 to objSheets.Count - 1                  
		if objSheets.getByName(objSheets.elementNames(I)).isVIsible = False then  ' IF    SHEET NASCOSTO
			objSheets.getByName(objSheets.elementNames(I)).isVIsible = True       ' LO SCOPRO 
			ThisComponent.Currentcontroller.setActiveSheet(objSheets.getByName(objSheets.elementNames(I)) ' LO RENDO ATTIVO E CORRENTE
			document   = ThisComponent.CurrentController.Frame                    ' ACQUISISCO L'OGGETTO FRAME
			ThisComponent.Print(PrnOptn())			
			' For j = 0 to 100000: Next j             
			objSheets.getByName(objSheets.elementNames(I)).isVIsible = False      ' NASCONDE LO SHEET STAMPATO
		endif                                         ' ENDIF
	Next I                                            ' NEXT SU ELENCO SHEETS                 



Dim DocName as object, DocUlr as string, dummy(), range as object
Doc = ThisComponent
Sheet = Doc.Sheets(5) ' 6° foglio del file contenete la macro
Range = Sheet.getCellRangeByName("B7:J7").getDataArray ' range da copiare
sFileName ="C:\Users\Lenovo\Desktop\Protocollo.ods"  ' file destinazione
DocUrl = ConvertToURL(sFileName)
DocName = StarDesktop.loadComponentFromURL (DocUrl, "_blank",0, Dummy() )
Protocollo = DocName.Sheets(0) 

Protocollo.unprotect("XXXXX")

Rem Trova prima riga vuota in colonna A
Riga = 5
Do while  DocName.Sheets(0).GetCellByposition(1,Riga).String <> ""
Riga = Riga + 1
Loop
Riga = Riga + 1

dRange  = Protocollo.getCellRangeByName("B" & Riga & ":J" & Riga) ' range destinazione (PrimaRigaLibera)
dRange.setDataArray(Range)
Doc.Sheets(0).GetCellRangeByName("E6").Value = Protocollo.getCellRangeByName("A" & Riga).Value
Protocollo.protect("XXXXX")
DocName.store
DocName.Close(true)

End Sub
Grazie mille a chi avrà la pazienza di leggere tutto quanto e trovare la giusta soluzione.
Ultima modifica di charlie il giovedì 4 maggio 2023, 14:14, modificato 1 volta in totale.
Motivazione: Formattato codice
OpenOffice 4.1.5 Windows 10
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Stampa solo da pulsante con macro

Messaggio da patel »

Vuoi stampare su pdf o su stampante ?
Per fare un pdf ci sono altre strade.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Ant52
Messaggi: 180
Iscritto il: sabato 18 agosto 2018, 15:38

Re: Stampa solo da pulsante con macro

Messaggio da Ant52 »

Sulla stampante. Grazie.
OpenOffice 4.1.5 Windows 10
Rispondi