Sviluppare funzionalita su Microsoft Office con VBA Reset Userform tramite macro

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

    FROST220684
    Partecipante

      Ciao a tutti,

      Spero possiate darmi una mano, all'interno del mio file ho una userform con 2 checkbox ed 1 textbox che inseriscono in automatico delle note in una foglio. Dallo stesso file lancio stampe pdf e vorrei che alla fine della stampa pdf l'userform si resettasse togliendo la spunta alle checkbox ed eliminando il testo dalla textbox.

      Come codice so di poter utilizzare questo aprendo l'userform ma io vorrei che tutto questo lo facesse la macro dopo la stampa ed essendo una Sub Private non la posso utilizzare. Qualche consiglio su come inserire due righe di codice aggiuntive che resettino l'userform?

      la Private Sub è questa: 

      Private Sub btnCancellaNote_Click()
      Checkbox1 = False
      Checkbox2 = False
      TextBox1.Value = ""
      End Sub

      mentre il codice macro (questo è solo una parte di codice della macro intera) che lancia la stampa pdf è questo:

      With wb2.Worksheets("Output")
              ' inserire il nome della cartella preventivi PDF al posto di Preventivi Excel
              .Select
              uRiga = .Cells(Rows.Count, "B").End(xlUp).Row
          
              .Range("$A$5:$D$65").AutoFilter Field:=4, Criteria1:="<>"
              With .PageSetup
                  .PrintArea = "A1:D" & uRiga
                  .Orientation = xlPortrait
                  .Zoom = False
                  .FitToPagesWide = 1
                  .FitToPagesTall = False
              End With
      
              .ExportAsFixedFormat Type:=xlTypePDF, _
                  Filename:=p & "\pdf\" & Replace(s, "/", "-") & ".pdf", _
                  Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                  IgnorePrintAreas:=False, OpenAfterPublish:=False
          End With
      
          wb2.Worksheets("Input").Select
          wb2.Close True  'salva e chiude il nuovo foglio creato
          
          With wb1.Worksheets("Input")
              ' inizio istruzioni di resettaggio celle
              .Range("B1,B2,B4,B5,B12:D12,B6:D6,E7,B8:D12,B20:D20,G26,G28:G30,G33,G35,J27,N45,D56,D57,D58,J31:J33,D64").ClearContents
              .Range("B6:D6") = "8/11/2024"
              .Range("E7") = "7"
              .Range("B8:D8") = "2"
              .Range("B9:D9") = "1"
              .Range("A56:C56") = "Rigo personalizzabile"
              .Range("A57:C57") = "Rigo personalizzabile"
              .Range("A58:C58") = "Rigo personalizzabile"
          
              ' istruzione di aggiunta +1 al preventivo
              .Range("B3").Value = .Range("B3").Value + 1
          End With

      Come vedete dopo la stampa vengono lanciate una serie di operazioni di reset del foglio o reimpostazione celle. Ecco insieme a queste operazioni io vorrei aggiungere il reset totale dell'userform.

      Grazie a tutti a disposizione per chiarimenti

      #43968 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Ma visto che le istruzioni di cancellazione sono così poche , perchè non le replichi a fine codice che genera il pdf?

        #43969 Score: 0 | Risposta

        FROST220684
        Partecipante

          immagino che siano a parte perchè il reset e la reimpostazione celle sono su un foglio mentre la stampa pdf viene lanciata su altro foglio ancora. ma naturalmente nella mia ignoranza posso sbagliare. Diciamo che cosi com'è funziona tutto benissimo quindi non mi sono mai posto il problema, rimane solo questo piccolo problema del reset userform.

          #43994 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            Bè le istruzioni di reset del form sono le stesse di btnCancellaNote_Click solo che faranno riferimento al form. Il quale deve essere aperto o almeno caricato anche senascosto:

            With Userform1         'qui ovviamente ci vuole il nome dell'userform reale
                .Checkbox1 = False
                .Checkbox2 = False
                .TextBox1.Value = ""
            End With

             

            #43997 Score: 0 | Risposta

            FROST220684
            Partecipante

              C'è un problema, il codice funziona però:

              io tramite la userform gestisco 3 righe nel foglio "output" dove cliccando sulle checkbox o inserendo nella textbox inserisco delle note. Il codice inserito effettivamente resetta la userform perchè se la apro subito è tutto deselezionato, ma se poi la chiudo e vado a guardare nel foglio output le note sono rimaste e se riapro la userform automaticamente si sono ripopolate. io invece vorrei che funzionasse proprio come l'userform che quando tolgo le spunte mi toglie anche le note con questo codice:

              Option Explicit
              
              
              
              
              Private Sub UserForm_Initialize()
              
              If Foglio2.Range("A75").EntireRow.Hidden = False Then
                  CheckBox1.Value = True
              End If
              
              If Foglio2.Range("A74").EntireRow.Hidden = False Then
                  CheckBox2.Value = True
              End If
              
              TextBox1.Value = Foglio2.Range("A72").Value2
              
              End Sub
              
              Private Sub btnConferma_Click()
              
              If CheckBox1 = True Then
                  Foglio2.Range("A75").EntireRow.Hidden = False
              Else
                  Foglio2.Range("A75").EntireRow.Hidden = True
              End If
              
              If CheckBox2 = True Then
                  Foglio2.Range("A74").EntireRow.Hidden = False
              Else
                  Foglio2.Range("A74").EntireRow.Hidden = True
              End If
              
              If Len(TextBox1) > 0 Then
                  Foglio2.Range("A72").Value2 = TextBox1
                  Foglio2.Range("A72").EntireRow.Hidden = False
                  Call AutoFitMergedCellRowHeight
              Else
                  Foglio2.Range("A72").Value2 = ""
                  Foglio2.Range("A72").EntireRow.Hidden = True
              End If
              
              Unload Me
              End Sub
              
              Private Sub AutoFitMergedCellRowHeight()
              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 = Range("A72:D72")
              
              rng.UnMerge
              
              CurrentRowHeight = Range("A72").RowHeight
              ActiveCellWidth = Range("A72").ColumnWidth
              
              For Each CurrCell In rng
                  MergedCellRgWidth = CurrCell.ColumnWidth + _
                  MergedCellRgWidth
              Next CurrCell
              
              With rng
                  '.MergeCells = False
                  .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
              
              Private Sub btnCancellaNote_Click()
                      TextBox1.Value = ""
              End Sub
              
              

              Questo mi permette di automatizzare tramite l'userform l'inserimento note ed il nascondere le righe vuote.

              invece con quel codice mi resetta l'userform ma quando si rende conto che sul foglio ci sono ancora le note ripopola tutto.

              allego file 

               

              Allegati:
              You must be logged in to view attached files.
              #44004 Score: 0 | Risposta

              FROST220684
              Partecipante

                ho notato che se dopo la stampa apro l'userform e clicco sul bottone conferma (dato che tutte le opzioni sono deselezionate) funziona. L'unico modo è capire se c'è un escamotage per automatizzare questa cosa

                #44007 Score: 0 | Risposta

                FROST220684
                Partecipante

                  basterebbe da quello che vedo che la macro apra in automatico dopo la stampa l'userform (questo sono riuscito a farlo), successivamente lanciasse il comando del bottone conferma ed il gioco è fatto se cosi si può dire.

                  #44008 Score: 0 | Risposta

                  FROST220684
                  Partecipante

                    una cosa del genere:

                    ` With UserForm1      'qui ovviamente ci vuole il nome dell'userform reale
                        .CheckBox1 = False
                        .CheckBox2 = False
                        .TextBox1.Value = ""
                        UserForm1.Show
                        Unload Me '(questo però non funziona - anche se questo forse non è abbastanza dato che deve confermare le checkbox e textbox)
                    'oppure meglio questo
                    btnConferma_Click() (anche questo non funziona)
                    End With`
                    #44010 Score: 1 | Risposta

                    vecchio frac
                    Senior Moderator
                      272 pts

                      Bè se ti basta questo, cambia la firma della Sub btnConferma e rendi la routine pubblica così la puoi richiamare da ovunque:

                      Public Sub btnConferma_Click()

                      Al termine della stampa, ti basta il comando:

                      Call UserForm1.btnConferma_Click
                      #44011 Score: 0 | Risposta

                      FROST220684
                      Partecipante

                        vecchio frac ha scritto:

                        Call UserForm1.btnConferma_Click

                        c'ho provato in vari modi ma mi mancava "userform1." prima del comando. vabbè ho imparato un altra cosa.

                        Come sempre perfetto. Grazie Fra

                        #44012 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          272 pts

                          FROST220684 ha scritto:

                          mi mancava "userform1." prima del comando

                          Poichè non è in un modulo pubblico ma in un modulo speciale di un oggetto particolare(l'userform) allora la routine deve essere qualificata per esteso.

                        Login Registrati
                        Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
                        Rispondi a: Reset Userform tramite macro
                        Gli allegati sono permessi solo ad utenti REGISTRATI
                        Le tue informazioni: