Pagina 1 di 1

Stampa solo da pulsante con macro

Inviato: mercoledì 3 maggio 2023, 23:29
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.

Re: Stampa solo da pulsante con macro

Inviato: giovedì 4 maggio 2023, 9:25
da patel
Vuoi stampare su pdf o su stampante ?
Per fare un pdf ci sono altre strade.

Re: Stampa solo da pulsante con macro

Inviato: giovedì 4 maggio 2023, 12:12
da Ant52
Sulla stampante. Grazie.