Sviluppare funzionalita su Microsoft Office con VBA Textbox Userfom che riporta valore cella di un foglio specifico con valuta

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

    Ciao a tutti!

    Ho un'altro problema..

    In pratica vorrei che le mie textbox riportino i valori presenti di una specifica cella abbianata di un determinato foglio.

    Per ora ho creato questa:

    Private Sub UserForm_Initialize()
    Dim I As Long
    For I = 2 To 3
        With Me.cboOperazione
            .AddItem Sheets("Impostazioni").Range("a" & I)
        End With
    Next I
    Dim f As Long
    For f = 2 To 5
        With Me.cboMezzo
            .AddItem Sheets("Impostazioni").Range("b" & f)
        End With
    Next f
    Dim h As Long
    For h = 2 To 11
        With Me.cboCerca
            .AddItem Sheets("Fatture").Range("b" & h)
        End With
    Next h
    Dim g As Long
    For g = 2 To 4
        With Me.cboTipo
            .AddItem Sheets("Impostazioni").Range("c" & g)
        End With
    Next g
    
    TextBox7.Value = Sheets("Totale").Range("A2").Value
    TextBox5.Value = Sheets("Totale").Range("C2").Value
    TextBox6.Value = Sheets("Totale").Range("B2").Value
    End Sub

    Tuttavia non riesco a trasformare i valori in valuta..

    Al momento sto provando con questo codice:

    Private Sub TextBox7_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
     TextBox7 = Format(TextBox7, "#,###.#0 €")
    End Sub
    
    Private Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
     TextBox5 = Format(TextBox5, "#,###.#0 €")
    End Sub
    
    Private Sub TextBox6_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
     TextBox6 = Format(TextBox6, "#,###.#0 €")
    End Sub

    Ma non funziona...

    Come posso fare?

     

    Grazie mille!

    #18611 Score: 0 | Risposta

    Marius44
    Moderatore
      51 pts

      Ciao

      Ricordati che ciò che esce da una TextBox è sempre una "stringa"

      Prova così

      TextBox5 = "€. " & Val(TextBox5)

      oppure al contrario se preferisci il simbolo alla fine

      Tieni comunque presente che è sempre una "stringa"

       

      Ciao,

      Mario

      #18615 Score: 0 | Risposta

      albatros54
      Moderatore
        81 pts

        nell'evento Initialize della tua userform modifica la riga in questo modo, da questo

        TextBox7.Value = Sheets("Totale").Range("A2").Value

        a questo

        TextBox7.Value = Format(Sheets("Totale").Range("A2").Value, "#,###.#0 €")

         

         

        Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
        Sempre il mare, uomo libero, amerai!
        ( Charles Baudelaire )
        #18620 Score: 0 | Risposta

        Ci sono riuscito!

        Almeno sulla parte interessata.

        Ora ho gli ultimi due problemi da risolvere prima di dire "ho completato il file" 😀 e uno riguarda sempre textbox e valuta.

        1) Problema modifica dati con selezione fattura:

        Tramite questo codice faccio apparire nella combobox chiamata "cboCerca" la lista delle fatture presente nel mio foglio "Fatture" della colonna B.

        Private Sub UserForm_Initialize()

        Dim h As Long

        For h = 2 To 11

            With Me.cboCerca

                .AddItem Sheets("Fatture").Range("b" & h)

            End With

        Next h

        End Sub

        Il problema è che una volta inserita la prima fattura non la visualizza dentro la combobox (appare tutto vuoto), mentre se chiudo e riapro la userform viene fuori come se si aggiornasse.

        Cosa devo fare per fare in modo che appaia da subito una volta inserita senza dover chiudere la Userform?

        2) Problema textbox con inserimento dati cella con valuta

        Attualmente se inserisco nella textbox l'importo della fattura me la riporta senza valore valuta, almeno che non divida i centesimi con il punto senza utilizzare la virgola. C'è un modo per trascrivere i dati su una cella tramite textbox sempre e comunque con la valuta a prescindere che si utilizzi il punto o la virgola?

        Ho provato inserendo il codice, ma da quello che ho capito interviene solo sulla textbox, ma non su quello che viene trascritto in cella.

        Attualmente se uso la virgola vengono fuori così senza il simbolo dell'euro e non vengono nemmeno calcolate nella foruma di somma:

        ​Grazie mille!

        Allego file di nuovo aggiornato.

         

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

        patel
        Moderatore
          50 pts

          la Sub UserForm_Initialize viene eseguita all'apertura della userform, quindi è inutile popolare qui la combobox, fallo tramite il pulsante conferma

          #18694 Score: 0 | Risposta

          Alla fine sono riuscito a sistemare il codice..

          Tuttavia ha solo un problema e vi chiedo un consiglio.

          Questo è il codice intero:

          Private Sub btnInserisci2_Click()
          Dim numriga As Long
          
          numriga = 2
          Do Until Sheets("Fatture").Cells(numriga, 2) = ""
              If Sheets("Fatture").Cells(numriga, 2) = cboCerca.Text Then Exit Do
              numriga = numriga + 1
          Loop
          
          Foglio3.Cells(numriga, 1) = cboTipo.Text
          Foglio3.Cells(numriga, 2) = txtNfattura.Text
          Foglio3.Cells(numriga, 3) = TextBox8.Text * 1
          
          numriga = Sheets("Totale").Range("A1").CurrentRegion.Rows.Count
          numriga = numriga + 0
          Foglio4.Cells(numriga, 2) = TextBox6.Text
          
          cboCerca.Text = ""
          cboTipo.Text = ""
          txtNfattura.Text = ""
          TextBox8.Text = ""
          cboCerca.SetFocus
          
          '--------------------------------------------------------------------
          '-------------------MODIFICA--------------------------------
          '--------------------------------------------------------------------
          cboCerca.Clear
          For h = 2 To 11
              With Me.cboCerca
                  .AddItem Sheets("Fatture").Range("b" & h)
              End With
          Next h
          '--------------------------------------------------------------------
          MsgBox ("Inserimento eseguito con successo!")
          End Sub

          Problema..

          Se premo il commandbutton btnInserisci2 e lascio i campi vuoti non mi da nessun errore e fino a qui tutto bene.

          Tuttavia se invece metto un valore nella combobox "cboTipo" e lascio vuota la TextBox8 dove solitamente inserisco l'importo e confermo con "btnInserisci2" mi appare il seguente errore:

          e mi evidenzia la seguente stringa:

          Cosa devo cambiare di quella stringa per evitare che si ripresenti l'errore?

          Quel codice mi permette in pratica che venga sempre fuori la valuta anche se inserisco valori seprati da virgola tipo: 22,20 ecc.. 

          Grazie mille!

          #18695 Score: 0 | Risposta

          albatros54
          Moderatore
            81 pts

            prova a cambiare la riga con la seguente

            Foglio3.Cells(numriga, 3) = Val(txtImporto.Text) * 1

             

             

            Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
            Sempre il mare, uomo libero, amerai!
            ( Charles Baudelaire )
            #18696 Score: 0 | Risposta

            Ho provato però non funziona 🙁

            Mi da sempre lo stesso errore.

             

            #18698 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              238 pts

              albatros54 ha scritto:

              Foglio3.Cells(numriga, 3) = Val(txtImporto.Text) * 1

              Forse voleva essere:

              Foglio3.Cells(numriga, 3) = Val(textbox8.Text) * 1
              #18711 Score: 0 | Risposta

              Grazie mille! Con il tuo codice ho risolto 😊

              Ultima domanda..

              Ho notato che nella mia Userform veniva evidenziato come selezione il commandbutton "btnChiudi". Ma se io volessi che la selezione riguardasse una specifica TextBox? Grazie mille

              #18717 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                238 pts

                I controlli espongono il metodo SetFocus che sposta su essi lo stato attivo (tranne casi particolari, ad esempio quando sono disabilitati o se il loro indice di tabulazione viene escluso o negli eventi di tastiera). Quindi con:

                TextBox1.SetFocus

                il textbox1 diventa il controllo attivo.

                #18730 Score: 0 | Risposta

                Dandelion1987

                  Ho provato il codice, funziona se faccio il test da VBA.

                  Ma se chiamo l'userform dal pulsante collegato a questa macro:

                  Sub Pulsante1_Click()
                      If UserForms.Count > 0 Then
                          Unload UserForm1
                      Else
                          UserForm1.Show vbModeless
                      End If
                  End Sub
                  

                  Si apre la Useform, ma non mi da la possibilità di scrivere nulla nella TextBox indicata (non mi appare il trattino di scrittura dentro come non fosse selezionata).

                  Da cosa può dipendere?

                  Il codice l'ho riportato qui:

                  Private Sub UserForm_Initialize()
                  
                  Dim I As Long
                  For I = 2 To 3
                      With Me.cboOperazione
                          .AddItem Sheets("Impostazioni").Range("a" & I)
                      End With
                  Next I
                  Dim f As Long
                  For f = 2 To 5
                      With Me.cboMezzo
                          .AddItem Sheets("Impostazioni").Range("b" & f)
                      End With
                  Next f
                  Dim h As Long
                  For h = 2 To 11
                      With Me.cboCerca
                          .AddItem Sheets("Fatture").Range("b" & h)
                      End With
                  Next h
                  Dim g As Long
                  For g = 2 To 6
                      With Me.cboTipo
                          .AddItem Sheets("Impostazioni").Range("c" & g)
                      End With
                  Next g
                  
                  txtUtenza.SetFocus
                  
                  TextBox7.Value = Sheets("Totale").Range("A2").Value
                  TextBox5.Value = Sheets("Totale").Range("C2").Value
                  TextBox6.Value = Sheets("Totale").Range("B2").Value
                  
                  TextBox5 = Format(TextBox5, "#,###0.#0 €")
                  TextBox6 = Format(TextBox6, "#,###0.#0 €")
                  TextBox7 = Format(TextBox7, "#,###0.#0 €")
                  End Sub

                  Grazie mille!

                  #18731 Score: 0 | Risposta

                  Purtroppo non mi da la possibilità di modificare il testo del messaggio precedente che risulta al quanto incomprensibile e mi scuso.

                  In sostanza ho inserito il codice seguente:

                  TextBox1.SetFocus

                  Funziona quando lo avvio tramite la Visual Basic (F5 - Esegui Sub/Userform), diversamente se apro la Userform attraverso la macro avviata da commandbutton appare così:

                  La textbox sarebbe quella accando a "utenza" e non appare il trattino in automatico per l'inserimento del testo, in più se provo a scrivere non succede nulla.

                  Il codice l'ho inserito qui:

                  Private Sub UserForm_Initialize()
                  
                  Dim I As Long
                  For I = 2 To 3
                      With Me.cboOperazione
                          .AddItem Sheets("Impostazioni").Range("a" & I)
                      End With
                  Next I
                  Dim f As Long
                  For f = 2 To 5
                      With Me.cboMezzo
                          .AddItem Sheets("Impostazioni").Range("b" & f)
                      End With
                  Next f
                  Dim h As Long
                  For h = 2 To 11
                      With Me.cboCerca
                          .AddItem Sheets("Fatture").Range("b" & h)
                      End With
                  Next h
                  Dim g As Long
                  For g = 2 To 6
                      With Me.cboTipo
                          .AddItem Sheets("Impostazioni").Range("c" & g)
                      End With
                  Next g
                  
                  txtUtenza.SetFocus
                  
                  TextBox7.Value = Sheets("Totale").Range("A2").Value
                  TextBox5.Value = Sheets("Totale").Range("C2").Value
                  TextBox6.Value = Sheets("Totale").Range("B2").Value
                  
                  TextBox5 = Format(TextBox5, "#,###0.#0 €")
                  TextBox6 = Format(TextBox6, "#,###0.#0 €")
                  TextBox7 = Format(TextBox7, "#,###0.#0 €")
                  End Sub

                  Va scritto in un posto diverso o in modo diverso?

                  Non spiego come mai funziona se avviato dalla Visual Basic (F5 - Esegui Sub/Userform) però..

                   

                  Grazie mille!

                  Scusate il doppio post ma non riuscendo a modificare il precedente non si capiva nulla.

                  #18732 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    238 pts

                    Dandelion1987 ha scritto:

                    Va scritto in un posto diverso o in modo diverso?

                    Secondo me funziona però non te ne accorgi perchè hai anticipato troppo l'istruzione. Credo infatti che impostare i vari Value e Format imponga al compilatore di spostarsi sui vari controlli per determinarne l'output. Sposta quindi la SetFocus subito prima di End Sub e vediamo che succede.

                    #18733 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      238 pts

                      vecchio frac ha scritto:

                      Secondo me funziona

                      Ho fatto dei test, non funziona 🙂 l'inghippo è dovuto probabilmente al fatto che il form viene invocato, dal pulsante sul foglio, in modalità modeless, il che restituisce il controllo al foglio e ruba quindi lo stato attivo ai controlli del form. Questo peraltro non espone un metodo SetFocus quindi secondo le mie prove dovresti cavartela con un arrangiamento: un sub pubblica che simula la pressione dei tasti freccia giu e freccia su per spostarsi e poi tornare al controllo desiderato.

                      Eccoti le modifiche da provare:

                      'codice del pulsante:
                      Sub Pulsante1_Click()
                          If UserForms.Count > 0 Then
                              Unload UserForm1
                          Else
                              UserForm1.Show vbModeless
                              UserForm1.showcaret
                          End If
                      End Sub
                      

                      nel form aggiungi la sub pubblica showcaret():

                      Public Sub showcaret()
                          txtUtenza.SetFocus
                          SendKeys "{DOWN}{UP}"
                      End Sub
                      
                      #18737 Score: 0 | Risposta

                      Grazie mille! Sono riuscito a risolvere grazie al tuo aiuto 🙂

                      Avrei un ultima cosa da chiedere.

                      Non avevo calcolato che se mi salvano la ricevuta con i dati inseriti dovevo creare anche un pulsante per il reset.

                      Ci sono riuscito creando questa macro che parte all'apertura del file excel o premendo sul pulsante dedicato:

                      Sub Nuova()
                      '
                      ' Nuova Macro
                      '
                      
                      '
                          Sheets("Cliente").Select
                          Range("A2:D2").Select
                          Selection.ClearContents
                          Range("A2").Select
                          Sheets("Fatture").Select
                          Range("A2:C11").Select
                          Selection.ClearContents
                          Range("A2").Select
                          Sheets("Totale").Select
                          Range("B2").Select
                          Selection.ClearContents
                          Sheets("Ricevuta").Select
                      End Sub
                      

                      L'unica cosa che mi da fastidio a livello estetico è che quando apro il file o resetto si vedono delle righe sullo sfondo per alcuni frangenti di secondo.

                      C'è la possibilità di evitare questo elemento di disturbo grafico?

                       

                      Grazie mille!

                      #18738 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        238 pts

                        Puoi utilizzare il metodo che disabilita l'aggiornamento dello schermo, da riabilitare all'uscita della sub:

                        Application,.ScreenUpdating = False     '(e chiaramente True alla fine)

                        Ti aggiungo che tutti quei Select non son necessari:

                        Sub Nuova()
                        '
                        ' Nuova Macro
                        '
                            Application.ScreenUpdating = False
                            WorkSheets("Cliente").Range("A2:D2").ClearContents
                            WorkSheets("Fatture").Range("A2:C11").ClearContents
                            WorkSheets("Totale").Range("B2").ClearContents
                            WorkSheets("Ricevuta").Select
                            Application.ScreenUpdating = True
                        End Sub
                        #18739 Score: 0 | Risposta

                        Funziona alla grande! 😀

                        Stavo pensando però ad un'ultima cosa..

                        Pensavo di aggiungere la funzione che invia direttamente tramite mail in formato PDF la ricevuta.

                        Tramite la registrazione di macro ho seguito il percorso corretto, tuttavia quando l'attivo viene fuori in formato Excel e non PDF.

                        Ecco il codice:

                        Sub Invia()
                        '
                        ' Invia Macro
                        '
                        
                        '
                            ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                                "C:\Users\CASTEL~1\AppData\Local\Temp\01.11.19 RICEVUTA DI PAGAMENTO_new_2019.pdf" _
                                , Quality:=xlQualityStandard, IncludeDocProperties:=False, _
                                IgnorePrintAreas:=False, OpenAfterPublish:=False
                            Application.Dialogs(xlDialogSendMail).Show
                        End Sub
                        

                        Io vorrei che uscisse in PDF direttamente.. come si può fare?

                        Inoltre volevo chiederti se è possibile tramite un commandbutton chiudere oltre all'useform (che sono riuscito a creare) anche l'intero foglio Excel.

                        Ho trovato questo codice, ma chiude anche altri file Excel che ho aperto:

                        Private Sub btnChiudi_Click()
                        Application.Quit
                        End Sub

                         Io invece vorrei chiudere solo il file della ricevuta.

                        Grazie mille! 🙂

                        Fatte queste modifiche avrò completato finalmente il mio file ricevute che condividerò volentieri

                        #18741 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          238 pts

                          Dandelion1987 ha scritto:

                          Io vorrei che uscisse in PDF direttamente.. come si può fare?

                           

                          Il metodo che hai giustamente provato si preoccupa di allegare il foglio attivo a una mail. L'unica strada è pilotare Outlook da Excel mediante automazione (vale se usi questo client di posta, altrimenti è una faccenda diversa): una volta generato il pdf e salvato con un percorso e nome preciso, crei un oggetto MailItem cui alleghi il file pdf, scrivi l'oggetto e il corpo della mail da codice, inserisci il destinatario e spedisci. Diverse volte ne abbiamo parlato anche qui in forum,. Una breve ricerca e trovi tutto.

                          Dandelion1987 ha scritto:

                          Io invece vorrei chiudere solo il file della ricevuta.

                          Se hai aperto un file separato con un nome preciso, che tu conosci a priori, il comando:

                          Windows("nomefilefattura.xlsx").Close False

                          provvede a chiudere il file con quel nome preciso (e lo chiude senza salvare le modifiche: metti True se vuoi salvare le modifiche).

                          #18744 Score: 0 | Risposta
                          Sub Invia()
                              
                          ' --> User settings, change to suit
                              Const IsDisplay As Boolean = True           ' Change to False to .Send instead of .Display
                              Const IsSilent As Boolean = False           ' Change to True to Send without the confirmation MsgBox
                          ' <-- End of settings
                              
                              Dim IsCreated As Boolean
                              Dim i As Long
                              Dim PdfFile As String
                              Dim OutlApp As Object
                              Dim char As Variant
                              
                          '
                          ' Define PDF filename
                              PdfFile = Range("C15").Value '===============>> CELLA CONTENENTE IL MESE
                              
                          ' Replace unallowed symbols by the underscore char
                              For Each char In Split("? "" / \ < > * | :")
                                  PdfFile = Replace(PdfFile, char, "_")
                              Next
                          ' Add %TEMP% path to the file name and limit too long pathname
                              PdfFile = Left(Environ("TEMP") & "\" & PdfFile, 251) & ".pdf"
                              
                          ' Export an active sheet as PDF
                              With ActiveSheet
                                  .ExportAsFixedFormat Type:=xlTypePDF, _
                                  Filename:=PdfFile, _
                                  Quality:=xlQualityStandard, _
                                  IncludeDocProperties:=True, _
                                  IgnorePrintAreas:=False, _
                                  From:=1, To:=1, _
                                  OpenAfterPublish:=False
                              End With
                              
                          ' Use already open Outlook if possible
                              On Error Resume Next
                              Set OutlApp = GetObject(, "Outlook.Application")
                              If Err Then
                                  Set OutlApp = CreateObject("Outlook.Application")
                                  IsCreated = True
                              End If
                              On Error GoTo 0
                              
                          ' Prepare e-mail with PDF attachment
                              With OutlApp.CreateItem(0)
                                  
                          ' Prepare e-mail
                                  .Attachments.Add PdfFile
                                  
                          ' Try to send or just display the e-mail
                                  On Error Resume Next
                                  If IsDisplay Then .Display Else .Send
                                  
                          ' Show error of .Send method
                                  If Not IsDisplay Then
                          ' Return focus to Excel's window
                                      Application.Visible = True
                          ' Report on error or success
                                      If Err Then
                                          MsgBox "E-mail was not sent for some reasons" & vbLf & "Please check it", vbExclamation
                                          .Display
                                      Else
                                          If Not IsSilent Then
                                              MsgBox "E-mail successfully sent", vbInformation
                                          End If
                                      End If
                                  End If
                                  On Error GoTo 0
                                  
                              End With
                              
                          ' Delete PDF file
                              Kill PdfFile
                              
                          ' Quit Outlook if it was created by this code
                              If IsCreated Then OutlApp.Quit
                              
                          ' Release memory of the object variable
                              Set OutlApp = Nothing
                              
                          End Sub
                          

                          Ho trovato questo codice che sembra funzionare.

                          Ho cancellato alcune parti che mi sembravano in più.

                          Tuttavia cosa devo modificare per fare in modo che il PDF contenga il nome del file?

                          ' Define PDF filename
                              PdfFile = Range("C15").Value '===============>> CELLA CONTENENTE IL MESE

                          Questa sembra la parte da variare, ma non so come.

                          Poi volevo chiederti se su tale codice che ho inserito ci sono altre parti che posso cancellare che non servono.

                          A me basta che apra la mail con dentro il file pdf.

                          #18745 Score: 0 | Risposta

                          vecchio frac
                          Senior Moderator
                            238 pts

                            Dandelion1987 ha scritto:

                            Ho cancellato alcune parti che mi sembravano in più.

                            Veramente a me sembra un ottimo codice, niente da eliminare a parte il MsgBox iniziale, del tutto inutile, e a parte che devi inserire destinatario, oggetto e corpo del testo (lo puoi fare anche da codice ovviamente).

                            Dandelion1987 ha scritto:

                            cosa devo modificare per fare in modo che il PDF contenga il nome del file?

                            Devi assegnare alla variabile di testo "pdffile" il percorso e il nome del pdf da allegare. Il codice che proponi pesca questo nome dalla cella C15 del foglio attivo. Tu invece hai passato a ExportAsFixedFormat questo valore:

                            Filename:= "C:\Users\CASTEL~1\AppData\Local\Temp\01.11.19 RICEVUTA DI PAGAMENTO_new_2019.pdf"

                            e pertanto è questa stringa che devi assegnare a pdffile affinchè il pdf venga allegato alla mail. Più o meno così:

                            ' Prepare e-mail
                                    pdffile = "C:\Users\CASTEL~1\AppData\Local\Temp\01.11.19 RICEVUTA DI PAGAMENTO_new_2019.pdf"
                                    .Attachments.Add PdfFile
                            #18753 Score: 0 | Risposta

                            Ci sono riuscito 😀 Grazie mille!

                            Per rendere il tutto perfetto come vorrei volevo chiederti se è possibile fare una cosa del genere.

                            Ho una combobox che ha il compito di creare una lista aggiornata delle fatture che inserisco per un massimo di 10.

                            questo è il codice per prendere la lista delle fatture:

                            Private Sub UserForm_Initialize()
                            Dim h As Long
                            For h = 2 To 11
                                With Me.cboCerca
                                    .AddItem Sheets("Fatture").Range("b" & h)
                                End With
                            Next h
                            End Sub

                            Poi ho inserito un'altro codice che si occupa di aggiornare la lista della combobox cboCerca ogni volta che premo il commandbutton btnInserisci2, in più mi permette selezionandola di modificare i dati relativi a quella specifica fattura:

                            Private Sub btnInserisci2_Click()
                            Dim numriga As Long
                            
                            numriga = 2
                            Do Until Sheets("Fatture").Cells(numriga, 2) = ""
                                If Sheets("Fatture").Cells(numriga, 2) = cboCerca.Text Then Exit Do
                                numriga = numriga + 1
                            Loop
                            
                            cboCerca.Clear
                            For h = 2 To 11
                                With Me.cboCerca
                                    .AddItem Sheets("Fatture").Range("b" & h)
                                End With
                            Next h
                            End Sub

                            Ora la mia domanda è questa.

                            E' possibile quando seleziono il numero fattura dalla combobox cbocerca che le rispettive textbox (sono tre: Tipo, N. Fattura e Importo) si riempiono con i dati della fattura selezionata in automatico?

                            Al momento i campi delle textbox rimangono vuoti e se modifico la fattura devo inserire per forza tutti e tre i dati nuovamente, altrimenti mi sovrascrive il valore vuoto cancellandomi di fatto quelli della cella collegata.

                             

                            Grazie mille!

                            #18759 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              238 pts

                              Nel mentre cerco di capire la tua domanda, cosa che non mi è facilissima senza uno scenario davanti, ti faccio pensare sul fatto che nel codice che vedo (in btnInserisci2) utilizzi un modo piuttosto lento per individuare il contenuto di cboCerca all'interno del foglio Fatture, colonna B. Il codice parte da riga 2 e le scorre tutte finchè non trova in colonna B il contenuto di cboCerca (che presumo sia un numero di fattura). C'è un sistema più veloce, che richiede meno righe di codice (due sole in effetti): consiste nell'utilizzare il metodo Find dell'oggetto Range. Se ti interessa, approfondiamo.

                              Anche riempire una combobox richiede meno codice (con List o RowSource, dipende dall'applicazione).

                               

                              #18760 Score: 0 | Risposta

                              vecchio frac
                              Senior Moderator
                                238 pts

                                Credo di aver capito la tua domanda: tu selezioni un numero fattura, inserendola in cboCerca. Di conseguenza le altre textbox devono riempirsi con i valori corrispondenti, presi sempre dal foglio Fatture.

                                La risposta a questo quesito l'ho già data, quasi inconsapevolmente, quando ti ho suggerito poco fa di utilizzare Find nella colonna B per cercare il numero di fattura. Il risultato di Find è un oggetto range, cioè la cella dove trovasi il dato cercato, e quindi a partire da tale cella puoi recuperare i valori delle celle precedenti e successive. Più complicato a dire che a codificare 🙂

                                Vuoi provarci, studiandoti il metodo Find di Range, o preferisci un aiuto più spinto?

                                #18761 Score: 0 | Risposta

                                Se mi potessi dare un aiuto più spinto te ne sarei davvero grato. Tutto quello che ho fatto finora lo devo unicamente alle persone come te che con molta disponibilità e pazienza mi spiegano come fare 😁 io mi limito ad apprendere poi a tentativi, osservando gli effetti e modificando. Se vuoi domani volentieri ti allego direttamente il file così vedi meglio come l'ho strutturato. Essenzialmente il cbocerca mi serve per dare una selezione alla riga da modificare partendo dal numero fattura. Ho fatto un totale di 10 righe, suddivise su tre colonnne: A1 "Tipo" - B1 "Fattura" - C1 "Importo". Cbocerca mi trova tutte le fatture nella colonna B. Io vorrei che nelle TextBox (che inseriscono i valori delle tre colonne A, B, C) vengano riportati in automatico i valori della fattura selezionata in cbocerca 😂 non so se mi sono spiegato,alla fine è più complicato da descrivere 

                              Login Registrati
                              Stai vedendo 25 articoli - dal 1 a 25 (di 40 totali)
                              Rispondi a: Textbox Userfom che riporta valore cella di un foglio specifico con valuta
                              Gli allegati sono permessi solo ad utenti REGISTRATI
                              Le tue informazioni: