scelta di colonne da stampare
Hai un problema con Excel? 
scelta di colonne da stampare
di nichicanta data: 15/09/2013 19:48:07
Carissimi amici, è da tempo che eseguo ricerche su internet e su questo forum ma non sono riuscito a trovare niente che si avvicini alla mia esigenza.
In un foglio di lavoro (vi allego un fac-simile di quello che utilizzo e sul quale bisogna intervenire) ho la necessità di stampare alcune colonne e non tutte, al fine di evitare di fare un copia incolla, in un altro foglio dei dati da stampare.
Esempio: ho una colonna che riporta l'indicazione dei nominativi dei condomini, poi altre colonne con funzioni di calcolo e le ultime che riportano il totale delle somme che spetta a ciascun condomino, ecco io vorrei poter stampare la prima colonna con le ultime e ( come se le nascondessi)non le colonne intermedie con funzioni di calcolo.
Saluti.
di Gaetanopr (utente non iscritto) data: 15/09/2013 20:11:59
Ciao, senza scaricare il tuo file, potresti fare in questo modo, è solo un'idea
Columns("F:F").EntireColumn.Hidden = True
macro che stampa il foglio
Columns("F:F").EntireColumn.Hidden = False
dove al posto della F indichi le colonne da nascondere e poi mostrare nuovamente
di nichicanta data: 15/09/2013 20:28:49
Innanzitutto Ciao Gaetanopr, l' avevo pensata pure io questa soluzione, però ho la necessità di poter selezionare ( magari da inputbox le colonne che non desidero stampare e che non sono mai contigue e cioè potrei selezionare la colonna E, poi la H poi la M ecc.) le colonne che mi interessano e poi lanciare la macro di stampa.
Appena ora, dopo un' ennesima ricerca su internet ho trovato (del grandissimo Mauro Gamberini) qualcosa che ha a che fare con la stampa (anche se diverso da quello che chiedo, ma solo per poter far lavorare meno gli amici del forum esperti e non). Allego il codice che può essere di aiuto o magari può essere adattato alla mia esigenza dagli amici del forum.
Ti saluto e ti ringrazio nuovamente Gaetanopr, penso che la tua soluzione sia un buono spunto di partenza per la definizione finale della mia richiesta.
Option Explicit
Public Sub m()
Dim lng As Long
Dim v As Variant
Dim v2 As Variant
Dim v3 As Variant
Dim lPagina As Variant
Dim lPagine As Long
Dim sh As Worksheet
v = Application.InputBox("Inserire le pagine singole da stampare separate da una virgola," & _
vbNewLine & "i gruppi di pagine separati dai due punti." _
& vbNewLine & vbNewLine & "(Esempio: 1,5:7,9)", "Stampa pagine.")
If v = False Or v = "" Then Exit Sub
v2 = Split(v, ",")
Set sh = ThisWorkbook.Worksheets("Foglio1")
With sh
lng = .HPageBreaks.Count
.PageSetup.PrintArea = ""
If lng = 0 Then
.PageSetup.PrintArea = CStr("A1:D60")
.PrintOut
Else
For Each lPagina In v2
If InStr(lPagina, ":") Then
v3 = Split(lPagina, ":")
For lPagine = v3(LBound(v3)) To v3(UBound(v3))
If lPagine <= lng Then
.PageSetup.PrintArea = CStr("A" & lPagine * 60 + 1 - 60 & ":" _
& "D" & lPagine * 60)
.PrintOut
End If
Next
Else
If lPagina <= lng Then
.PageSetup.PrintArea = CStr("A" & lPagina * 60 + 1 - 60 & ":" _
& "D" & lPagina * 60)
.PrintOut
Else
MsgBox "Attenzione è stato introdotto un valore errato!"
End If
End If
Next
End If
.PageSetup.PrintArea = ""
End With
Set lPagina = Nothing
Set sh = Nothing
End Sub
|
di nichicanta (utente non iscritto) data: 17/09/2013 11:52:44
Buongiorno amici c'è la possibilità di trovare una soluzione alla mia richiesta in questa discussione.
Vi ringrazio anticipatamente..
di mb data: 17/09/2013 15:01:54
richiesta info
ipotiziamo di aver salvato il file con la sub
come devo modificarla per poterla utilizzare con altri file
ipotizzando che un file si chiami pippo oppure paperino per quel poco che capisco di vba la riga sotto riportata si può solo utilizzare sul file aperto e non su altri.
c'è qualche trucco per poterlo fare
Grazie
Set sh = ThisWorkbook.Worksheets("Foglio1") |
di Vecchio Frac data: 17/09/2013 15:15:41
Cioè così intendi?
Set sh = Workbooks("pippo").Worksheets("Foglio1")
|
di Vecchio Frac data: 17/09/2013 15:17:07
Io sto studiando una soluzione che permetta a nichi di marcare le colonne da stampare, quindi le copi in un foglio temporaneo, le stampi e quindi chiuda senza salvarlo il foglio temporaneo.
Mi sembra più veloce e semplice.
Per marcare le colonne da stampare basta un X in una cella libera corrispondente alla colonna da stampare.
di mb data: 17/09/2013 15:36:05
Buongiorno vecchio frac
pensandoci bene forse sono stato troppo invasivo nella richiesta, fammi sapere se è meglio aprire un nuovo argomento
grazie
p.s forse la soluzione proposta è vincolante al fatto che il file si chiami pippo, una volta mi avevano aiutato ad utilizzare una macro d'appoggio anche se i file erano diversi
fammi sapere se aprire una nuova chiacchierata
rigrazie
di Vecchio Frac data: 17/09/2013 15:41:54
@mb
Guarda, adesso sto rispondendo al quesito iniziale di nichicanta.
Allego un file con la mia proposta.
Meglio se apri una discussione nuova così non mescoliamo gli interlocutori ^_^
@nichi
E' una proposta un po' rozza ma potrebbe funzionare.
Alla fine della macro avrai un foglio in più da aggiustare e mandare in stampa, poi lo puoi eliminare tranquillamente (i dati originali non vengono toccati).
di Vecchio Frac data: 17/09/2013 15:45:18
Accludo il testo della macro così rimane.
Suppone che in riga 5 si mettano delle X in corrispondenza delle colonne da riportare nel foglio temporaneo (la macro è abbastanza intelligente da recuperare i dati delle colonne interessate, dall'intestazione di colonna in giù).
Ripropongo già che ci sono una funzione Union migliorata rispetto a quella predefinita di Excel.
Option Explicit
Sub selective_print()
Dim c As Range, r As Range
Dim sh As Worksheet, tmp As Worksheet
Set sh = ActiveSheet
For Each c In sh.[A5:M5]
If c Like "[Xx]" Then
Set r = Union(r, sh.Range(Cells(9, c.Column), Cells(Cells([A:A].Rows.Count, 1).End(xlUp).Row, c.Column)))
End If
Next
r.Copy
Set tmp = Worksheets.Add
Application.Goto tmp.[a1]
ActiveCell.PasteSpecial
Application.CutCopyMode = False
End Sub
Private Function Union(Rng1 As Range, Rng2 As Range) As Range
'thx to Tushar Mehta
'dailydoseofexcel.com/archives/2007/08/17/two-new-range-functions-union-and-subtract/
If Rng1 Is Nothing Then
Set Union = Rng2
ElseIf Rng2 Is Nothing Then
Set Union = Rng1
Else
Set Union = Application.Union(Rng1, Rng2)
End If
End Function |
di nichicanta (utente non iscritto) data: 17/09/2013 15:58:38
V.Frac, innnazitutto ti ringrazio per il puntuale e prezioso interessamento,per la mia esigenza potrebbe andare bene, ti chedo solo (per favore e cortesia) di aggiungere il codice che mi deselezioni le x dal foglio originale e mi lelimini il foglio di appoggio dopo la stampa dei dati di mio interesse, poichè dovrò creare un pulsante di comando con vari msgbox che mi dica quante copie stampare, cosa stampare ( come area di stampa) e altro.
Vi saluto con stima e ammirazione per quello che fate.
di Vecchio Frac data: 17/09/2013 16:26:57
Ma nichiiiiii ^_^ pappa pronta? :)
cit. "aggiungere il codice che mi deselezioni le x"
---> Cancellare un range è facile:
Range("A5:A25").ClearContents
cit. "mi elimini il foglio di appoggio dopo la stampa dei dati di mio interesse"
---> Prima lo devi mandare in stampa (con la serie di pulsanti che hai nominato) e poi lo elimini, per esempio e rozzamente:
tmp.PrintOut
Application.DisplayAlerts = False
tmp.Delete
Application.DisplayAlerts = True
di nichicanta (utente non iscritto) data: 17/09/2013 16:35:46
Grazie V.Frac. hai ragione non ho parole per scusarmi.
Ti ringrazio e ti saluto.
Vuoi Approfondire?