Sviluppare funzionalita su Microsoft Office con VBA Visualizza riga nella stampa solo se valorizzata

Login Registrati
Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
  • Autore
    Articoli
  • #45283 Score: 0 | Risposta

    FROST220684
    Partecipante

      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.
      #45305 Score: 1 | Risposta

      Raffaele53
      Partecipante
        23 pts

        Se io metto in riga49>>> Supplemento ombrellone 1^ fila = 300 in cella J4 (manca una formula) credo debba apparire 1

        Se J4 e valorizzata, nel foglio Voucher C71 appare la casuale.
        Questa cella è unita a D71 mà il filtro lavora per la Colonna D

        Prova..., dividi le celle e metti la formula in D71

        #45318 Score: 1 | Risposta

        alexps81
        Moderatore
          58 pts

          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 AutoFitMergedCellRowHeight

          Ho 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 Sub
          

          come 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.

          #45319 Score: 1 | Risposta

          alexps81
          Moderatore
            58 pts

            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 Sub
            
            #45320 Score: 0 | Risposta

            FROST220684
            Partecipante

              Probabilmente 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.

              alexps81 ha scritto:

              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

               

              #45321 Score: 0 | Risposta

              alexps81
              Moderatore
                58 pts

                FROST220684 ha scritto:

                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.

                #45343 Score: 0 | Risposta

                FROST220684
                Partecipante

                  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.

                   

                  #45344 Score: 0 | Risposta

                  FROST220684
                  Partecipante

                    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

                    #45434 Score: 0 | Risposta

                    FROST220684
                    Partecipante

                      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.
                      #45442 Score: 0 | Risposta

                      FROST220684
                      Partecipante

                        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.
                        #45452 Score: 1 | Risposta

                        alexps81
                        Moderatore
                          58 pts

                          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 = False
                          

                          così disabiliti gli Alert...ma poi riattivali con:

                          Application.DisplayAlerts = True
                          

                          subito prima di Unload Me

                           

                          #45454 Score: 0 | Risposta

                          FROST220684
                          Partecipante

                            perfetto grazie mille 

                            si si alla fine funziona era solo il fastidio dell'alert, abbiamo risolto con il display alert

                            Grazie alex   

                          Login Registrati
                          Stai vedendo 12 articoli - dal 1 a 12 (di 12 totali)
                          Rispondi a: Visualizza riga nella stampa solo se valorizzata
                          Gli allegati sono permessi solo ad utenti REGISTRATI
                          Le tue informazioni: