› Sviluppare funzionalita su Microsoft Office con VBA › Visualizza riga nella stampa solo se valorizzata
-
AutoreArticoli
-
Ciao a tutti,
ho un problema con una riga che si nasconde da sola anche se è valorizzata quando lancio una macro di stampa pdf oppure anche quando seleziono il foglio incriminato. Spiego meglio:
1. Se all'interno del preventivo (foglio input) inserisco dei supplementi (Es. ombrellone 1 fila, etc) tramite una formula questi vengono valorizzati nella cella ("C71:D71") del foglio Voucher. Non so perchè però anche se quella riga è valorizzata si nasconde sempre sia se seleziono il foglio voucher sia se lancio la macro di stampa Save_voucher (ci sono dei filtri applicati per nascondere le celle vuote) ma essendo valorizzate non dovrebbero nasconderla. Ho provato a modificare i filtri ma senza successo, niente da fare.
Io vorrei che se nel Range C71:D71 c'è scritto qualcosa funzionasse cosi:
1. L'altezza della riga si dovrebbe adattare al contenuto del testo quindi se inserisco più cose si deve ingrandire
2. Quando lancio la macro Save_voucher se in C71:D71 c'è scritto qualcosa me la inserisce nella stampa mentre se non c'è scritto nulla mi nasconde proprio la riga 71
Spero qualcuno riesca ad aiutarmi mi sta facendo impazzire
Allego file di prova con dei supplementi inseriti
Grazieeeeeee
Allegati:
You must be logged in to view attached files.Ciao @frost220684,
scusa se esco fuori tema (tanto raffaele53 già te l'ha risolto...benedette celle unite
). Volevo farti notare un dettaglio su una serie di chiamate a delle Sub praticamente uguali tra loro. Siccome mi sento un po' responsabile perché questa Sub l'avevo inserita io nel tuo file qualche settimana fa...volevo dirti che è inutile creare tante Private Sub AutoFitMergedCellRowHeightHo visto che ne hai create un bel po' per Range e Celle diverse, ma basta crearne una sola, ma parametrica e passargli i vari rifermenti.
Ti giro il codice della Sub AutoFitMergedCellRowHeight parametrica:
Sub AutoFitMergedCellRowHeight(ByVal zona As Range, ByVal cella As Range) Dim CurrentRowHeight As Single, MergedCellRgWidth As Single Dim ActiveCellWidth As Single, PossNewRowHeight As Single Dim CurrCell As Range, rng As Range Application.ScreenUpdating = False Set rng = zona rng.UnMerge CurrentRowHeight = cella.RowHeight ActiveCellWidth = cella.ColumnWidth For Each CurrCell In rng MergedCellRgWidth = CurrCell.ColumnWidth + _ MergedCellRgWidth Next CurrCell With rng .Cells(1).ColumnWidth = MergedCellRgWidth .EntireRow.AutoFit PossNewRowHeight = .RowHeight .Cells(1).ColumnWidth = ActiveCellWidth .MergeCells = True .HorizontalAlignment = xlJustify .VerticalAlignment = xlCenter .WrapText = True .RowHeight = IIf(CurrentRowHeight > _ PossNewRowHeight, _ CurrentRowHeight, PossNewRowHeight) End With Application.ScreenUpdating = True Set rng = Nothing End Subcome puoi notare tra le parentesi dopo la dichiarazione della Sub, ci sono ByVal zona As Range e ByVal cella As Range
Ora quando vuoi richiamala con la funzione Call ma tra parentesi metti i rifermenti alle celle interessate
Call AutoFitMergedCellRowHeight(Range("A72:D72"), Range("A72"))cioè alla chiamata della Sub AutoFitMergedCellRowHeight gli passiamo il range di celle unite (Range("A72:D72")) e la cella in cui andrà il testo una volta separato il range (Range("A72"))
Quindi quando più avanti richiamerai ancora la Sub AutoFitMergedCellRowHeight, tra parentesi metterai i nuovi riferimenti che vuoi passare.
Perciò avrai una sola Sub AutoFitMergedCellRowHeight (parametrica) e tante chiamate a lei stessa.
Anche il pulsante CONFERMA della UserForm1 puoi semplificarlo così:
Public Sub btnConferma_Click() If CheckBox1 = True Then Foglio2.Range("A75").EntireRow.Hidden = False Foglio9.Range("A73").EntireRow.Hidden = False Foglio10.Range("A76").EntireRow.Hidden = False Foglio11.Range("A74").EntireRow.Hidden = False Else Foglio2.Range("A75").EntireRow.Hidden = True Foglio9.Range("A73").EntireRow.Hidden = True Foglio10.Range("A76").EntireRow.Hidden = True Foglio11.Range("A74").EntireRow.Hidden = True End If If CheckBox2 = True Then Foglio2.Range("A74").EntireRow.Hidden = False Foglio9.Range("A72").EntireRow.Hidden = False Foglio10.Range("A75").EntireRow.Hidden = False Foglio11.Range("A73").EntireRow.Hidden = False Else Foglio2.Range("A74").EntireRow.Hidden = True Foglio9.Range("A72").EntireRow.Hidden = True Foglio10.Range("A75").EntireRow.Hidden = True Foglio11.Range("A73").EntireRow.Hidden = True End If If Len(TextBox1) > 0 Then Foglio2.Range("A72").Value2 = TextBox1 Foglio2.Range("A72").EntireRow.Hidden = False Call AutoFitMergedCellRowHeight(Foglio2.Range("A72:D72"), Foglio2.Range("A72")) Foglio9.Range("A70").Value2 = TextBox1 Foglio9.Range("A70").EntireRow.Hidden = False Call AutoFitMergedCellRowHeight(Foglio9.Range("A70:D70"), Foglio9.Range("A70")) Foglio10.Range("A73").Value2 = TextBox1 Foglio10.Range("A73").EntireRow.Hidden = False Call AutoFitMergedCellRowHeight(Foglio10.Range("A73:D73"), Foglio10.Range("A73")) Foglio11.Range("A71").Value2 = TextBox1 Foglio11.Range("A71").EntireRow.Hidden = False Call AutoFitMergedCellRowHeight(Foglio11.Range("A71:D71"), Foglio11.Range("A71")) Else Foglio2.Range("A72").Value2 = "" Foglio2.Range("A72").EntireRow.Hidden = True Foglio9.Range("A70").Value2 = "" Foglio9.Range("A70").EntireRow.Hidden = True Foglio10.Range("A73").Value2 = "" Foglio10.Range("A73").EntireRow.Hidden = True Foglio11.Range("A71").Value2 = "" Foglio11.Range("A71").EntireRow.Hidden = True End If Unload Me End SubProbabilmente mi sono spiegato male, il foglio voucher nel range C71:D71 inserisce tramite una formula già presente tutti i supplementi se nelle celle è presente il valore 1 (ad es. La cella J4).
La riga 49 citata non va toccata perché anche lì c'è una formula.
Il problema non è sul foglio input, su questo inseriamo solo i supplementi che si dovrebbero vedere nel foglio voucher nel range C71:D71.
Infatti se scaricate il file e scoprite la riga che attualmente è nascosta (ed è questo che non capisco) vedrete che i supplementi che avevo inserito io in principio ci sono. Il problema è che la riga si nasconde da sola e non deve farlo se c'è qualcosa ma solo se non c'è niente.
scusa se esco fuori tema (tanto raffaele53 già te l'ha risolto...benedette celle unite
).Leggero bene tutto e modifico per bene so che è possibile sintetizzare ma non sono bravo in questo a farlo da solo. Il problema non è risolto se vuoi interagire anche tu fai conto che deve funzionare come il form che abbiamo creato per le note celiachia solo che quelle vengono inserite tramite userform queste tramite una formula
Probabilmente mi sono spiegato male,
No no ti sei spiegato bene e raffaele53 ti ha suggerito giusto.
Nel foglio Voucher devi separare le celle C1:D71 che sono unite. Quando le separi, sposta la formula da C71 in D71 (mi raccomando no "trascinare" la cella da C71 in D71 perché poi cambiano i riferimenti alle celle nella formula). Seleziona la cella C71, poi entra nella Barra della Formula, seleziona tutta la formula, Copiala...dai Invio, vai in cella D71, nella barra della Formula incolla la formula copiata. Cancella la formula in C71 (ormai non serve più) e vedrai che funziona.
Unica cosa non so se da qualche parte hai del codice che ripristina tutte le formule e che andrebbe a posizionare di nuovo quella formula in C71.
Ciao Raffaele,
Intanto chiedo scusa per aver detto che non era risolto il problema ma mi ha tratto in inganno i riferimenti al foglio input (scusa l'ignoranza)
Grazie mille, si effettivamente il problema stavo nell'unione celle ed ho sistemato un po tutto.
diciamo che il responsabile o lo sfaticato sono io, nel senso che non sono molto bravo e non riesco a semplificare. So benissimo che ripetere 1000 volte il codice sarebbe meglio evitare ma che ti devo dire ogni tanto imbroglio e cerco di risolvere il problema senza disturbare più di quante volte disturbo.
Comunque grazie mille sembra funzionare tutto con il codice semplificato.
Come sempre sei sempre d'aiuto
ciao ragazzi,
mi è sorto un problema quando inserisco delle note manuali. Mi spiego meglio:
Tramite l'userform1 posso inserire delle note manuali. Il problema esce solo in questo caso quando apro l'userform note aggiuntive ed inserisco delle note manuali, quando clicco su conferma mi da' l'errore in allegato appena clicco su conferma dicendomi che la colonna è piu larga, non riesco a capire come risolverlo e prima della modifiche dei precedenti post non lo ha mai dato questo problema.
Operazioni da eseguire per l'errore:
1. apro il file
2. clicco su note aggiuntive
3. scrivo qualcosa in note manuali
4. clicco su conferma
Grazie mille per l'aiuto
Allegati:
You must be logged in to view attached files.aggiungerei che se clicco su no mi va in debug qui
se clicco su si invece ripete l'errore n volte e poi funziona
Allegati:
You must be logged in to view attached files.Non credo sia un errore...piuttosto è un avviso che ti da l'applicazione riguardo l'alterazione momentanea della lunghezza della cella in colonna "A". Se provi a modificare la visualizzazione dei 4 fogli da modalità Pagine e Layout a Anteprima Interruzioni di Pagina vedrai che dovrebbe funzionare senza questo messaggio. Cmq se premi su SI funziona tutto senza intoppi. Ovviamente se premi NO la Sub si interrompe.
Ad ogni modo se vuoi evitare questo messaggio inserisci subito dopo Public Sub btnConferma_Click():
Application.DisplayAlerts = Falsecosì disabiliti gli Alert...ma poi riattivali con:
Application.DisplayAlerts = Truesubito prima di Unload Me
perfetto grazie mille
si si alla fine funziona era solo il fastidio dell'alert, abbiamo risolto con il display alert
Grazie alex
-
AutoreArticoli
