Excel Forum Per condividere esperienze su Microsoft Excel

Inserire Dati da Userform a Foglio [RISOLTO - CHIUSA]

  • Messaggi
  • nTdQ231201
    00 03/12/2023 15:29
    Ciao,
    accogliendo il suggerimento di alfrimpa, che ringrazio, apro un nuovo post trasferendo quanto avevo chiesto nel post "Progetto file gestionale" inserito nella Sezione "I vostri lavori".
    Nel file allegato quando clicco sul pulsante "Registra" posto sulla form "FrmInsDoc" mi dà questo messaggio "Impossibile trovare l'oggetto specificato".
    Non ho capito dove sta l'errore.
    rex88
  • OFFLINE
    by sal
    Post: 7.458
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 03/12/2023 15:49
    Ciao L'errore sta nel fatto che prima nomini i "TextBox" con "TB_Prodotti1-2-3-etc" e poi nella verifica e pulizia li chiami "TextBox", come vedi qui

    For nTB = 1 To 5
        If Me.Controls("TB_Prodotti" & nTB).Value = "" Then
            Me.Controls("TB_Prodotti" & nTB).SetFocus
            Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("Label" & nTB).Caption
        End If
    Next nTB


    ho sostituito io "TexBox" con "TB_Prodotti" vi è anche da un altra parte lo stesso errore, e non ho controllato se vi sarà lo stesso errore da qualche altra parte.

    Non capisco la mania di cambiare nome agli oggetti, che vengono gestiti meglio da Excel con i loro nomi originali

    Ciao By Sal (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • nTdQ231201
    00 03/12/2023 16:10
    Ciao,
    ho fatto le correzioni.
    Il messaggio persiste.
  • OFFLINE
    alfrimpa
    Post: 4.986
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 03/12/2023 16:20
    Re:
    by sal, 03/12/2023 15:49:



    Non capisco la mania di cambiare nome agli oggetti, che vengono gestiti meglio da Excel con i loro nomi originali




    Concordo totalmente

    Alfredo
  • nTdQ231201
    00 03/12/2023 16:23
    Allora li devo chiamare TextBox1, TextBox2, ....?
  • OFFLINE
    by sal
    Post: 7.459
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 04/12/2023 08:59
    Ciao Non è quello di chiamarli come Textbox1-2-etc.. è il modo di scrivere il codice vba, ti faccio un esempio di 3 textbox.

    nelle proprietà cambio i nomi di Textbo1 in TB_Codice Textbox2 in TB_Descrizione e Textbox3 in TB_Quantita

    ora dovrei con il codice pulire queste Textbox, con il nome TextBox1-2-3 me la cavo con 3 righe di codice

    For x = 1 to 3
      Controls("TextBox" & x) = ""
    next x


    invece nominandole diversamente anche se leggendo TB_Codice "si tratta di codice parlante" capisco che quella Textbox è relativa al Codice cosi per le altre, ma devo scrivere forzatamente il codice diverso per ogni Textbox

    TB_Codice = ""
    TB_Descrizione = ""
    TB_Quantita = ""


    pensa se sono 20 o più textbox dovrei scriverle sempre ognuna sia per cancellare che per controllare o scrivere nel foglio, invece me la cavo solamente con le tre righe di codice con il ciclo For..Next invece di 3 scrivo 20 ed ho risolto

    Il segreto principale, è quando si crea il form si mettono le textbox o Combobox in modo sequenziale, in questo modo contando le texbox sul form sai il nome della textbox usata per quel particolare dato.

    ti allego il tuo file che ho modificato

    Ciao By Sal (8-D
    [Modificato da by sal 04/12/2023 09:00]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • nTdQ231201
    00 04/12/2023 10:27
    Ho scaricato il tuo file.
    Dove trovo la correzione fatta da te nel codivìce vba?
  • OFFLINE
    dodo47
    Post: 3.591
    Registrato il: 06/04/2013
    Utente Master
    2010
    00 04/12/2023 10:28
    Re:
    by sal:


    Non capisco la mania di cambiare nome agli oggetti, che vengono gestiti meglio da Excel con i loro nomi originali



    Ciao
    non mi trovate molto d'accordo con questa affermazione.

    I nomi "parlanti" sono di molto aiuto nella lettura di un codice, in modo particolare da parte di chi, non avendolo fatto, ci deve mettere le mani.

    Capisco la comodità (in questo caso) di utilizzare controls(....), ma ci sono vie alternative:
    - magari l'utilizzo dei Tag
    - oppure riferirsi alla parte comune del nome (TB_)
    - o, se si è un po' più esperti, delle classi.

    saluti






    [Modificato da dodo47 04/12/2023 10:33]
    Domenico
    Win 10 - Excel 2016
  • nTdQ231201
    00 04/12/2023 10:52
    Ciao bysal,
    ho fatto alcune prove con il file da te corretto, ma il problema persite.

    Ciao dodo47,
    confesso di non essere i grado di spingermi oltre.

    Grazie.
    rex88
  • OFFLINE
    by sal
    Post: 7.462
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 04/12/2023 10:57
    Ciao fai un immagine di come imposti il form, a me non da problemi forse ci sarà qualche altro Textbox da qualche parte che non ho visto.

    Ciao By Sal (8-D

    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • OFFLINE
    by sal
    Post: 7.463
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 04/12/2023 11:00
    Ciao Domenico, lo so per il fatto del codice parlante, ma confesso non so usare le classi, o meglio non mi entrano in testa, ed ho difficolta quanto nel codice VBA cambiano il nome agli oggetti.

    Comunque lo sai il VBA è Soggettivo, non tutti lo usano allo stesso modo.

    Ciao Salvatore (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • nTdQ231201
    00 04/12/2023 11:12
    Ciao bysal,
    questo è l'immagine del file.
    Dopo aver cliccato su pulsante Inserisci i dati vendono inseriti nella listbox.
    Quando clicco sul pulsante Registra appare il messaggio.
  • OFFLINE
    dodo47
    Post: 3.592
    Registrato il: 06/04/2013
    Utente Master
    2010
    00 04/12/2023 11:20
    ciao
    questa istruzione:

    Me.Controls("Label" & nTB)

    sicuro che esistono le "LabelXXX" ??

    Nel tuo foglio hai solo la Label225 e 338 che contengono le intestazioni

    saluti



    [Modificato da dodo47 04/12/2023 11:35]
    Domenico
    Win 10 - Excel 2016
  • nTdQ231201
    00 04/12/2023 11:37
    Ciao,
    sulla form esistino due label:
    Label255
    Label338
    LB_Descrizione
  • nTdQ231201
    00 04/12/2023 11:44
    Ho eliminato dal codice la riga:

    Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("Label" & nTB). Caption

    Adesso funziona

    Passo allo step successivo.
  • OFFLINE
    by sal
    Post: 7.464
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 04/12/2023 11:47
    Ciao il processo incriminato è questo, CREDO

    For nTB = 1 To 5
        If Me.Controls("TB_Prodotti" & nTB).Value = "" Then
            Me.Controls("TB_Prodotti" & nTB).SetFocus
            Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("TB_Prodotti" & nTB).Name 'modifica
        End If
    Next nTB
    
    For nComboBox = 1 To 4
        If Me.Controls("ComboBox" & nComboBox).Value = "" Then
            Me.Controls("ComboBox" & nComboBox).SetFocus
            Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("ComboBox" & nComboBox).Name 'modifica
        End If
    Next nComboBox


    penso che con Label volesse indicare il nome del TextBox oppure ComboBox che sta controllando quando non è riempito, quel codice serve a questo, poi la Caption vale per la scritta nella label e non il nome dell'oggetto, vedi la modifica che ho effettuato rispetto al tuo codice

    ti ho inserito anche un Exit Sub prima dell'errore, per non vedere il MsgBox alla fine della Routine

    Exit Sub
    USCITA:
    If Err.Number <> 0 Then
        MsgBox Err.Description, vbExclamation, "ATTENZIONE"
    End If
    End Sub
    


    poi mi dici i vari passaggi, fai prima Inserisci e poi Registra, dopo inserisci il Registra trova le textbox e combobox vuote e qui scatta l'errore se non sono piene.

    ti allego il file

    Ciao By Sal (8-D


    [Modificato da by sal 04/12/2023 11:48]
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • nTdQ231201
    00 04/12/2023 12:08
    Ho eliminato queste due righe dal codice del pulsante "Registra"

    Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("Label" & nTB).Caption
    Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("Label" & nTB).Caption

    Adesso non dà più il messaggio.

    Ho inserito due prodotti ma nel foglio allegati si popola solo la riga 10, invece si dovrebbe accodare.
  • nTdQ231201
    00 04/12/2023 12:10
    Scusami bysal,
    ci siamo incrociati con i messaggi.
    Il mio ulimo non ha tenuto conto del tuo ultimo.
    Faccio le prove e poi comunico.
  • nTdQ231201
    00 04/12/2023 12:18
    Ciao bysal,
    ho inserito due righe e ho cliccato su Registra.
    Il risulktato è nell'immagine allegata.
  • nTdQ231201
    00 04/12/2023 13:20
    Questo è il tuo file da dove ho ricavato l'immagine.
  • nTdQ231201
    00 04/12/2023 18:15
    Ciao bysal,
    se sei d'accordo chiuderei il post come risolto limitatamente all'oggetto e trasferirei in un altro post il messaggi delle ore 12:18 e 13:20, dando al post il seguente titolo: Inserire dati da userform a foglio.
  • OFFLINE
    L2018
    Post: 934
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Senior
    EXCEL 2016 - SPREAD32
    00 04/12/2023 19:16
    @rex88

    un post è un messaggio

    l'insieme dei post o messaggi raggruppati sotto un titolo si chiama thread o discussione

    l'etichetta di internet, detta anche netiquette, suggerisce che non è estetico, ordinato e leggibile un intero gruppo di discussioni portate avanti contemporaneamente, cioè aggiornando continuamente questa o quell'altra discussione, come hai già fatto.

    Ogni argomento è una discussione ed è educato chiudere una discussione PRIMA di aprirne un'altra

    Quindi, poichè sullo stesso argomento complessivo tieni già aperte 3 discussioni, i casi sono 2

    O continui su questa senza aprirne altre

    O, se ritieni di dover trattare un altro argomento, piu o meno diverso da questo devi accettare che le 3 precedenti vengano chiuse.
    per chiuderle è sufficiente che tu non le aggiorni più, diversamente verranno chiuse d'ufficio

    Se una discussione verte su un argomento lungo o complicato, a mio avviso non ha senso creare una nuova discussione con nuovo titolo per ogni passo da compiere nella risoluzione dello stesso

    Inoltre poichè un forum non è una chat non appare ergonomico scrivere messagi in continuazione anche per motivi inutili
    ogni messaggio puo' essere aggiornato, modificato entro un lasso di tempo molto comodo, cliccando su tasto MODIFICA del proprio ultimo messaggio, almeno per segnalare piccole variazioni della situazione operativa.

    Saluti

    LEO
    https://t.me/LordBrum
  • nTdQ231201
    00 04/12/2023 20:18
    Ti ringrazio e mi atterrò alle disposizioni.
    Pertanto continuo con questo.
  • OFFLINE
    L2018
    Post: 935
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Senior
    EXCEL 2016 - SPREAD32
    00 04/12/2023 20:20
    Re:
    rex88 (nTdQ231201), 04/12/2023 20:18:

    Ti ringrazio e mi atterrò alle disposizioni.
    Pertanto continuo con questo.


    grazie a te per la comprensione


    LEO
    https://t.me/LordBrum
  • nTdQ231201
    00 05/12/2023 10:04
    Ciao,
    nel codice posto sul pulsante "Registra" c'è questa parte che riguarda i prodotti

    'verifica dati inseriti
    For nTB = 1 To 5
    If Me.Controls("TB_Prodotti" & nTB).Value = "" Then
    Me.Controls("TB_Prodotti" & nTB).SetFocus
    Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("TB_Prodotti" & nTB).Name 'modifica
    End If
    Next nTB

    Il messaggio che si trova nell'immagine allegata al post di ieri ore 12:18 può dipendere dal fatto che i prodotti sono testo e nella parte del codive vba c'è .Value?

    Per favore mi potete dire come mettere il codice vba ytra tag.
    Grazie

    rex88
  • OFFLINE
    L2018
    Post: 936
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Senior
    EXCEL 2016 - SPREAD32
    00 05/12/2023 10:14
    ciao
    "Per favore mi potete dire come mettere il codice vba ytra tag."

    Per mettere il codice fra tag, in un messaggio, anzitutto scrivi il testo del codice

    For nTB = 1 To 5
    If Me.Controls("TB_Prodotti" & nTB).Value = "" Then
    Me.Controls("TB_Prodotti" & nTB).SetFocus
    Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("TB_Prodotti" & nTB).Name 'modifica
    End If
    Next nTB

    poi lo "evidenzi", quindi dovrebbe diventare azzurro
    poi in basso alla finestra del messaggio clicchi sul simbolo composto da "minore, slash, maggiore" accidenti non me lo fa scrivere, è i simbolo che si trova subito a destra delle doppie virgolone
    clicchi OK la prima volta, lasciando invariata la parola TEXT, poi la seconda volta potresti scrivere un piccolo titolo esplicativo (io ho messo VB)
    e a sto punto il codice compare così

    VB
    For nTB = 1 To 5
    If Me.Controls("TB_Prodotti" & nTB).Value = "" Then
    Me.Controls("TB_Prodotti" & nTB).SetFocus
    Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("TB_Prodotti" & nTB).Name 'modifica
    End If
    Next nTB


    [Modificato da L2018 05/12/2023 10:18]

    LEO
    https://t.me/LordBrum
  • nTdQ231201
    00 05/12/2023 10:17
    Grazie
    Ho provato a sostituire . Value con .Text ma niente da fare.ù
    Non riesco a trovare l'errore.
    rex88
    [Modificato da rex88 05/12/2023 10:23]
  • OFFLINE
    by sal
    Post: 7.469
    Registrato il: 14/11/2004
    Utente Master
    Office 2019
    00 05/12/2023 12:37
    Ciao Premesso che quella parte controlla solamente se vi è un valore nella textbox.

    usami una cortesia, metti questo codice al posto del tuo

    For x = 1 To 5
      If Controls("TB_Prodotti" & x) = "" Then
        MsgBox "Attenzione controlla TextBox, Manca dato", vbCritical, "Controllo dati"
        Exit Sub
      End If
    Next x
    For x = 1 To 4
      If Controls("Combobox" & x) = "" Then
        MsgBox "Attenzione controlla ComboBox, Manca dato", vbCritical, "Controllo dati"
        Exit Sub
      End If
    Next x


    e elimina questo

    For nTB = 1 To 5
        If Me.Controls("TB_Prodotti" & nTB).Value = "" Then
            Me.Controls("TB_Prodotti" & nTB).SetFocus
            Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("TB_Prodotti" & nTB).Name 'modifica
        End If
    Next nTB
    
    For nComboBox = 1 To 4
        If Me.Controls("ComboBox" & nComboBox).Value = "" Then
            Me.Controls("ComboBox" & nComboBox).SetFocus
            Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("ComboBox" & nComboBox).Name 'modifica
        End If
    Next nComboBox


    cosi risolviamo il problema, non ce bisogno di fare il controllo dell'errore, se manca il dato non puoi proseguire nella registrazione

    Ciao By Sal (8-D
    se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
  • nTdQ231201
    00 05/12/2023 13:00
    Ho fatto come suggerito.
    Come devo dichiare la x
    Dim x As
    Inoltre come fare se alcune textbox o combobox non hanno dati inseriti?
    [Modificato da rex88 05/12/2023 13:26]
  • OFFLINE
    L2018
    Post: 937
    Registrato il: 02/04/2018
    Città: PESCARA
    Età: 75
    Utente Senior
    EXCEL 2016 - SPREAD32
    00 05/12/2023 13:32
    Re:
    Ciao, mi fa piacere che tu abbia rapidamente appreso a modificare un post

    Ora, mentre aspetti la risposta di By_sal, se vuoi, e se mi suggerisci tu, possiamo cambiare il titolo a tutta questa discussione richiamandone tutto il contenuto in poche parole, ripeto, se vuoi

    Attenzione:
    dopo il prossimo messaggio la discussione aprirà automaticamente una seconda pagina, sempre appartenente a questa discussione
    [Modificato da L2018 05/12/2023 13:36]

    LEO
    https://t.me/LordBrum
1